jQuery调用WCF开发实例经验分享
创始人
2024-07-29 03:11:55
0次

我所使用的机器环境是:Windows7 VS2010 。

一、我们首先建好一个项目,在VS2010中,建立好一个Web项目,并添加一个“启用了Ajax的WCF服务”。

二、添加完成后,会自动打开刚才添加的文件,我们进行一些简的修改,便于一会客户端去调用,修改代码如下:

  1. [ServiceContract(Namespace = "")]   
  2. [AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]  
  3. public class DataService  
  4.      {   
  5.          ///    
  6.          /// 一、简单调用服务端方法   
  7.         ///    
  8.          ///   
  9.          [OperationContract]  
  10.          [WebGet()]  
  11.          public string DoWork()  
  12.          {            
  13.              return string.Format("Today is {0}",DateTime.Now.ToString("yyyy年MM月dd日 HH:mm:ss:fff"));  
  14.          }  
  15.           
  16.      } 

三、客户端代码中如下:

  1.    
  2.      
  3.        
  4.          
  5.          
  6.          $(document).ready(function () {   
  7.              $("#btnGetServerDate").click(function () {   
  8.                  $.ajax({   
  9.                      url: "DataService.svc/DoWork",  
  10.                      type: "get",  
  11.                      success: function (data) {  
  12.                          alert(data.d);  
  13.                      }  
  14.                  })  
  15.              });  
  16.          })  
  17.        
  18.    
  19.    
  20.        
  21.      
     
  22.       
  23.          
 
  •        
  •    
  •   
  • 以上是最基本的调用没有什么可说的.

    下面,我们来进行一个稍微复杂点的例子演示,我们在实现的效果是:“客户端提交一个注册信息,然后在服务器端取出并解析成一个实体类对象,然后返回客户端状态。服务端代码如下:

    1. ///    
    2.        /// 二、由客户端传入数据示例        
    3.        ///    
    4.        /// Json格式的UserInfo数据   
    5.        ///    
    6.        [OperationContract]   
    7.        [WebGet(ResponseFormat=WebMessageFormat.Json)] //必须是WebGet,客户端对应着Get方式请求,如果是POST方式,服务端而是WebInvoke,不过很遗憾,暂时貌似好不支持,反正我是没使用成功,有知道的请告诉我   
    8.        public string Register(string userInfo)   
    9.        {  
    10.            UserInfo model = JsonConvert.DeserializeObject(userInfo);//Newtonsoft.Json 使用第三方类库将传入的Json字符串反序列化成实体类。  
    11.            return string.Format("hello {0} sir!", model.LoginName);  
    12.        } 

    然后客户端对应如下:

    1. //示例二   
    2.            $("#btnRegiter").click(function () {   
    3.                var jsonString = "userinfo={\"loginName\":\"cheng\",\"password\":\"tomcat\"}"; //注意:我服务端只接收一个参数那就是String类型命称为userInfo的变量,所以前面对应也叫userInfo   
    4.                $.ajax({   
    5.                    url: "DataService.svc/Register",   
    6.                    type:"get", //注意是Get方式,服务端对应着WebGet()   
    7.                    data: jsonString,   
    8.                    success: function (data) {   
    9.                        alert(data.d);  
    10.                    }  
    11.                })  
    12.            }) 

    此例子主要演示,客户端提交一个JSON字符串格式的数组到服务端,然后服务端通过反序列化方式将传入的字符串序列化成自定义对象。NET3.5自已也支持反序列化,但用的不爽,我用的是“Newtonsoft.Json”这个,但也需要注意一个问题,那就是如果客户端传入的数据是数值类型的话,请不要加引号,否则会反序列化失败。如“{"age":25}”,服务端对应“public int Age{get;set;}”。但具JSON.org上说的标准JSON格式,健/值好像都应该需要加上引号的,所以这里大家需要注意。

    下面接着在演示一个客户端获取一个List类型数据并解析,同样服务端代码如下:

    1. [OperationContract]   
    2.          [WebGet(ResponseFormat = WebMessageFormat.Json)]   
    3.          public List GetAll()   
    4.          {   
    5.            List lists = new List()    
    6.              {    
    7.                  new UserInfo() { LoginName = "cheng", Password = "cheng" },   
    8.                  new UserInfo() { LoginName = "tomcat", Password = "tomcat" }    
    9.              };  
    10.              return lists;  
    11.          }  
    12.    
    13.  [DataContract]  
    14.      public class UserInfo  
    15.      {  
    16.          private string _loginName;  
    17.          private string _password;  
    18.    
    19.          [DataMember]  
    20.          public string Password  
    21.          {  
    22.              get { return _password; }  
    23.              set { _password = value; }  
    24.          }  
    25.          [DataMember]  
    26.          public string LoginName  
    27.          {  
    28.              get { return _loginName; }  
    29.              set { _loginName = value; }  
    30.          }  
    31.      } 

    客户端代码如下:

    1. $("#btnGetAllUser").click(function () {   
    2.                  $.ajax({   
    3.                      url: "DataService.svc/GetAll",   
    4.                      type: "get", //注意是Get方式,服务端对应着WebGet()                
    5.                      success: function (data) {   
    6.                          for (var i = 0; i < data.d.length; i++) {   
    7.                              $("#divContent").append("用户名:" + data.d[i].LoginName + "密码:" + data.d[i].Password + "");                              
    8.                          }   
    9.                      },  
    10.                      error: function (msg) {  
    11.                          alert(msg.responseText);  
    12.                      }  
    13.                  })  
    14.              }) 

    好了,三种最常用的调用方式就这样了,当然,你可以稍微修改一下连接上数据库一起使用,***我总结一下,在调用过程常见的错误及解决方法。

    一、推荐使用Firebug去调试,在Firebug中有一个“网络”选项卡,在那里,你可以清楚的看到你是否成功调用WCF服务,而且可以看到返回的数据格工及详细内容,而且如果调用出错,也可以给出明确的出错信息。

    jQuery调用WCF经验分享

    二、在调试阶端,推荐使用“GET”方式请求服务,然后在error:funcation(msg){alert(msg.responseText);}这样同样也能看到大部份出错提示。

    三、配置文件,在添加时就自动配置好了,所以一般情况下没有特殊要求无需更改。这是VS2010中的好处。

    原文链接:http://www.cnblogs.com/bdqlaccp/archive/2011/05/08/2039415.html

    【编辑推荐】

    1. 5月***超有趣的免费jQuery插件推荐
    2. 从零开始学习jQuery之管理jQuery包装集
    3. jQuery性能指标和调优
    4. 手把手教你jQuery jqPlot画图插件
    5. 从零开始学习jQuery之***的选择器

    相关内容

    热门资讯

    PHP新手之PHP入门 PHP是一种易于学习和使用的服务器端脚本语言。只需要很少的编程知识你就能使用PHP建立一个真正交互的...
    网络中立的未来 网络中立性是什... 《牛津词典》中对“网络中立”的解释是“电信运营商应秉持的一种原则,即不考虑来源地提供所有内容和应用的...
    各种千兆交换机的数据接口类型详... 千兆交换机有很多值得学习的地方,这里我们主要介绍各种千兆交换机的数据接口类型,作为局域网的主要连接设...
    粉嫩如何诠释霸道 东芝M805... “霸道粉”是个什么玩意东芝M805拿过来的时候,笔者扑哧笑了,不是笑这款笔记本,而是笑这款产品的颜色...
    如何利用交换机和端口设置来管理... 在网络管理中,总是有些人让管理员头疼。下面我们就将介绍一下一个网管员利用交换机以及端口设置等来进行D...
    什么是大数据安全 什么是大数据... 在《为什么需要大数据安全分析》一文中,我们已经阐述了一个重要观点,即:安全要素信息呈现出大数据的特征...
    全面诠释网络负载均衡 负载均衡的出现大大缓解了服务器的压力,更是有效的利用了资源,提高了效率。那么我们现在来说一下网络负载...
    如何允许远程连接到MySQL数... [[277004]]【51CTO.com快译】默认情况下,MySQL服务器仅侦听来自localhos...
    30分钟搞定iOS自定义相机 最近公司的项目中用到了相机,由于不用系统的相机,UI给的相机切图,必须自定义才可以。就花时间简单研究...
    Windows恶意软件20年“... 在Windows的早期年代,病毒游走于系统之间,偶尔删除文件(但被删除的文件几乎都是可恢复的),并弹...