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 @   阿土仔  阅读(7449)  评论(2编辑  收藏  举报
编辑推荐:
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
点击右上角即可分享
微信分享提示