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 

         
    
    
posted @ 2012-07-05 14:28  阿土仔  阅读(7444)  评论(2编辑  收藏  举报