自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

jQuery調用WCF開發(fā)實例經(jīng)驗分享

開發(fā) 前端
本文討論一下jQuery異步調用WCF服務的過程中需要注意的各種問題及經(jīng)驗分享。

我所使用的機器環(huán)境是:Windows7 VS2010 。

一、我們首先建好一個項目,在VS2010中,建立好一個Web項目,并添加一個“啟用了Ajax的WCF服務”。

二、添加完成后,會自動打開剛才添加的文件,我們進行一些簡的修改,便于一會客戶端去調用,修改代碼如下:

  1. [ServiceContract(Namespace = "")]   
  2. [AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]  
  3. public class DataService  
  4.      {   
  5.          /// <summary>   
  6.          /// 一、簡單調用服務端方法   
  7.         /// </summary>   
  8.          /// <returns></returns>  
  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. <html xmlns="http://www.w3.org/1999/xhtml">   
  2.   <head runat="server">   
  3.      <title></title>  
  4.       <script src="Scripts/jquery-1.4.1.min.js" type="text/javascript"></script>   
  5.       <script type="text/javascript">   
  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.      </script>  
  18.  </head>  
  19.  <body>  
  20.      <form id="form1" runat="server">  
  21.      <div>  
  22.       
  23.          <input id="btnGetServerDate" type="button" value="簡單調用" title="顯示服務器上的時間" /></div>  
  24.      </form>  
  25.  </body>  
  26.  </html> 

以上是最基本的調用沒有什么可說的.

下面,我們來進行一個稍微復雜點的例子演示,我們在實現(xiàn)的效果是:“客戶端提交一個注冊信息,然后在服務器端取出并解析成一個實體類對象,然后返回客戶端狀態(tài)。服務端代碼如下:

  1. /// <summary>   
  2.        /// 二、由客戶端傳入數(shù)據(jù)示例        
  3.        /// </summary>   
  4.        /// <param name="userInfo">Json格式的UserInfo數(shù)據(jù)</param>   
  5.        /// <returns></returns>   
  6.        [OperationContract]   
  7.        [WebGet(ResponseFormat=WebMessageFormat.Json)] //必須是WebGet,客戶端對應著Get方式請求,如果是POST方式,服務端而是WebInvoke,不過很遺憾,暫時貌似好不支持,反正我是沒使用成功,有知道的請告訴我   
  8.        public string Register(string userInfo)   
  9.        {  
  10.            UserInfo model = JsonConvert.DeserializeObject<UserInfo>(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\"}"//注意:我服務端只接收一個參數(shù)那就是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字符串格式的數(shù)組到服務端,然后服務端通過反序列化方式將傳入的字符串序列化成自定義對象。NET3.5自已也支持反序列化,但用的不爽,我用的是“Newtonsoft.Json”這個,但也需要注意一個問題,那就是如果客戶端傳入的數(shù)據(jù)是數(shù)值類型的話,請不要加引號,否則會反序列化失敗。如“{"age":25}”,服務端對應“public int Age{get;set;}”。但具JSON.org上說的標準JSON格式,健/值好像都應該需要加上引號的,所以這里大家需要注意。

下面接著在演示一個客戶端獲取一個List類型數(shù)據(jù)并解析,同樣服務端代碼如下:

  1. [OperationContract]   
  2.          [WebGet(ResponseFormat = WebMessageFormat.Json)]   
  3.          public List<UserInfo> GetAll()   
  4.          {   
  5.            List<UserInfo> lists = new List<UserInfo>()    
  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("<a>用戶名:" + data.d[i].LoginName + "</a><a>密碼:" + data.d[i].Password + "</a><br />");                              
  8.                          }   
  9.                      },  
  10.                      error: function (msg) {  
  11.                          alert(msg.responseText);  
  12.                      }  
  13.                  })  
  14.              }) 

好了,三種最常用的調用方式就這樣了,當然,你可以稍微修改一下連接上數(shù)據(jù)庫一起使用,***我總結一下,在調用過程常見的錯誤及解決方法。

一、推薦使用Firebug去調試,在Firebug中有一個“網(wǎng)絡”選項卡,在那里,你可以清楚的看到你是否成功調用WCF服務,而且可以看到返回的數(shù)據(jù)格工及詳細內容,而且如果調用出錯,也可以給出明確的出錯信息。

jQuery調用WCF經(jīng)驗分享

二、在調試階端,推薦使用“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性能指標和調優(yōu)
  4. 手把手教你jQuery jqPlot畫圖插件
  5. 從零開始學習jQuery之***的選擇器
責任編輯:陳貽新 來源: 陳玉國的博客
相關推薦

2009-12-22 16:03:03

WCF異常

2009-12-22 19:26:51

WCF綁定

2009-12-22 13:48:09

引用WCF服務

2009-12-22 18:18:11

WCF客戶端編程

2010-02-22 11:10:17

WCF獲取客戶端IP

2009-12-21 13:27:45

WCF服務配置信息

2010-03-01 15:40:04

WCF實例停用

2009-06-12 14:32:53

WCFJSON對象jQuery

2011-06-14 09:27:43

高性能WEB開發(fā)

2011-07-07 10:49:41

JavaScript

2009-12-07 15:02:46

WCF學習

2011-07-08 15:20:30

seamjsf

2010-01-14 18:14:22

VB.NET開發(fā)特點

2018-05-07 15:28:45

項目開發(fā)管理

2012-12-27 10:05:15

2011-04-25 16:56:34

Greedy Bank游戲開發(fā)獨立開發(fā)者

2010-03-02 17:48:35

WCF尋址報頭

2009-11-09 17:06:38

WCF選擇綁定

2011-08-10 09:42:08

2011-07-22 13:37:32

點贊
收藏

51CTO技術棧公眾號