AJAX調用WCF


1.本域內調用WCF
   a.新建“WCF服務應用程序”(注:使用的是系統自動生成的服務),服務接口加個Namespace屬性,例如Namespace="http://www.ccniit.com"
   b.修改.svc文件( 技巧:點擊不能打開,找到相應目錄,雙擊打開),加個屬性
     Factory="System.ServiceModel.Activation.WebScriptServiceHostFactory" 
     表示可用腳本調用WCF服務;
   c.如果使用微軟的ScriptManager,則配置其services屬性,地址一定要使用“~",讓ScriptManager自動生成代理js腳本(這個js腳本其時
在IE瀏覽中瀏覽.svc文件時,加個/js可自動得到),調用有點意思:
     要先生成對象 var service=new www.123.com.iservice1();//這里是用的a步驟中的服務接口名全小寫;
                      service.方法調用//和ScriptManager調用.asmx完全一樣;
     稍要着重注意的是調用GetDataUsingDataContract方法:
              //調用GetDataUsingDataContract方法
            var service = new www.ccniit.com.iservice1();
            var comType = new WcfService1.CompositeType();
            comType.BoolValue = true;
            comType.StringValue = "huangbo";
            service.GetDataUsingDataContract(comType, DealRes);
            function DealRes(res) {
                alert(res.StringValue); //StringValue是CompositeType的一個屬性
            }
   d.jQuery調用示例:
               //調用GetData方法
               $.ajax({
                url: "Service1.svc/GetData",//調用GetData方法
                type: "POST",
                dataType: "json",
                contentType: "application/json",
                data: '{"value":123}',//傳遞參數值(參數名叫value)
                success: function (data) {
                    alert(data.d);
                }
               });
               
               //調用GetDataUsingDataContract方法
               /*composite:參數名
                 CompositeType:參數類型
                 WcfService1:CompositeType定義的命名空間
                 BoolValue和SringValue:CompositeType中的屬性*/
               var datas = '{"composite":
{"__type":"CompositeType:http://schemas.datacontract.org/2004/07/WcfService1","BoolValue":true,"StringValue":"huangbo"}}';
              
            $.ajax({
                url: "Service1.svc/GetDataUsingDataContract",
                type: "POST",
                dataType: "json",
                contentType: "application/json;charset=utf-8",
                data: datas,
                success: function (res) {
                    alert(res.d.StringValue);
                }
            });                    
     用Fiddler跟蹤,得到的都是JSON格式;
2.跨域調用WCF(僅限於JQuery)
  a.使用JSONP
    (1)先建立“空白網站”;
    (2)在網站中添加新項-“啟用了AJAX的WCF服務",IDE地自動在Web.Config中添加一系列東西;
    (3)打開服務類, 在類聲明頭部添加[JavascriptCallbackBehavior(UrlParameterName="jsoncallback")],
         方法定義處添加 [WebGet(ResponseFormat = WebMessageFormat.Json)]
    (4)在web.config中添加Forms身份驗證: <authentication mode="Forms" />(這句必須要,否則不能調用成功)
    (5)使用WCF配置管理工具,添加”綁定”,選"webHttpBinding",設定"crossDomainScriptAccessEnabled="true"
    (6)在服務的終結點定義中,設定"BindingConfiguration"為步驟(5)中設定的Binding
    (5)使用JQuery的$.getJSON方法(DoWork是要調用的方法)
         //不需要參數
         $.getJSON("http://localhost:2801/WebSite3/Service.svc/DoWork?jsoncallback=?", function (data) {
           alert(data);
         });
         //需要參數(name是參數名)
         $.getJSON("http://localhost:3115/WebSite4/Service.svc/DoWork?jsoncallback=?", { "name": "huangbo" }, function (data) 
{
            alert(data);
        });

     這里發現使用WCF服務,並發布到IIS上,以https傳輸,Fiddler是無法捕捉信息的,以https提供服務,可參考:

     http://www.cnblogs.com/bearhb/archive/2012/07/02/2573236.html 

         
    
    


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM