jQuery調(diào)用WCF開發(fā)實(shí)例經(jīng)驗(yàn)分享
我所使用的機(jī)器環(huán)境是:Windows7 VS2010 。
一、我們首先建好一個項(xiàng)目,在VS2010中,建立好一個Web項(xiàng)目,并添加一個“啟用了Ajax的WCF服務(wù)”。
二、添加完成后,會自動打開剛才添加的文件,我們進(jìn)行一些簡的修改,便于一會客戶端去調(diào)用,修改代碼如下:
- [ServiceContract(Namespace = "")]
 - [AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
 - public class DataService
 - {
 - /// <summary>
 - /// 一、簡單調(diào)用服務(wù)端方法
 - /// </summary>
 - /// <returns></returns>
 - [OperationContract]
 - [WebGet()]
 - public string DoWork()
 - {
 - return string.Format("Today is {0}",DateTime.Now.ToString("yyyy年MM月dd日 HH:mm:ss:fff"));
 - }
 - }
 
三、客戶端代碼中如下:
- <html xmlns="http://www.w3.org/1999/xhtml">
 - <head runat="server">
 - <title></title>
 - <script src="Scripts/jquery-1.4.1.min.js" type="text/javascript"></script>
 - <script type="text/javascript">
 - $(document).ready(function () {
 - $("#btnGetServerDate").click(function () {
 - $.ajax({
 - url: "DataService.svc/DoWork",
 - type: "get",
 - success: function (data) {
 - alert(data.d);
 - }
 - })
 - });
 - })
 - </script>
 - </head>
 - <body>
 - <form id="form1" runat="server">
 - <div>
 - <input id="btnGetServerDate" type="button" value="簡單調(diào)用" title="顯示服務(wù)器上的時間" /></div>
 - </form>
 - </body>
 - </html>
 
以上是最基本的調(diào)用沒有什么可說的.
下面,我們來進(jìn)行一個稍微復(fù)雜點(diǎn)的例子演示,我們在實(shí)現(xiàn)的效果是:“客戶端提交一個注冊信息,然后在服務(wù)器端取出并解析成一個實(shí)體類對象,然后返回客戶端狀態(tài)。服務(wù)端代碼如下:
- /// <summary>
 - /// 二、由客戶端傳入數(shù)據(jù)示例
 - /// </summary>
 - /// <param name="userInfo">Json格式的UserInfo數(shù)據(jù)</param>
 - /// <returns></returns>
 - [OperationContract]
 - [WebGet(ResponseFormat=WebMessageFormat.Json)] //必須是WebGet,客戶端對應(yīng)著Get方式請求,如果是POST方式,服務(wù)端而是WebInvoke,不過很遺憾,暫時貌似好不支持,反正我是沒使用成功,有知道的請告訴我
 - public string Register(string userInfo)
 - {
 - UserInfo model = JsonConvert.DeserializeObject<UserInfo>(userInfo);//Newtonsoft.Json 使用第三方類庫將傳入的Json字符串反序列化成實(shí)體類。
 - return string.Format("hello {0} sir!", model.LoginName);
 - }
 
然后客戶端對應(yīng)如下:
- //示例二
 - $("#btnRegiter").click(function () {
 - var jsonString = "userinfo={\"loginName\":\"cheng\",\"password\":\"tomcat\"}"; //注意:我服務(wù)端只接收一個參數(shù)那就是String類型命稱為userInfo的變量,所以前面對應(yīng)也叫userInfo
 - $.ajax({
 - url: "DataService.svc/Register",
 - type:"get", //注意是Get方式,服務(wù)端對應(yīng)著WebGet()
 - data: jsonString,
 - success: function (data) {
 - alert(data.d);
 - }
 - })
 - })
 
此例子主要演示,客戶端提交一個JSON字符串格式的數(shù)組到服務(wù)端,然后服務(wù)端通過反序列化方式將傳入的字符串序列化成自定義對象。NET3.5自已也支持反序列化,但用的不爽,我用的是“Newtonsoft.Json”這個,但也需要注意一個問題,那就是如果客戶端傳入的數(shù)據(jù)是數(shù)值類型的話,請不要加引號,否則會反序列化失敗。如“{"age":25}”,服務(wù)端對應(yīng)“public int Age{get;set;}”。但具JSON.org上說的標(biāo)準(zhǔn)JSON格式,健/值好像都應(yīng)該需要加上引號的,所以這里大家需要注意。
下面接著在演示一個客戶端獲取一個List類型數(shù)據(jù)并解析,同樣服務(wù)端代碼如下:
- [OperationContract]
 - [WebGet(ResponseFormat = WebMessageFormat.Json)]
 - public List<UserInfo> GetAll()
 - {
 - List<UserInfo> lists = new List<UserInfo>()
 - {
 - new UserInfo() { LoginName = "cheng", Password = "cheng" },
 - new UserInfo() { LoginName = "tomcat", Password = "tomcat" }
 - };
 - return lists;
 - }
 - [DataContract]
 - public class UserInfo
 - {
 - private string _loginName;
 - private string _password;
 - [DataMember]
 - public string Password
 - {
 - get { return _password; }
 - set { _password = value; }
 - }
 - [DataMember]
 - public string LoginName
 - {
 - get { return _loginName; }
 - set { _loginName = value; }
 - }
 - }
 
客戶端代碼如下:
- $("#btnGetAllUser").click(function () {
 - $.ajax({
 - url: "DataService.svc/GetAll",
 - type: "get", //注意是Get方式,服務(wù)端對應(yīng)著WebGet()
 - success: function (data) {
 - for (var i = 0; i < data.d.length; i++) {
 - $("#divContent").append("<a>用戶名:" + data.d[i].LoginName + "</a><a>密碼:" + data.d[i].Password + "</a><br />");
 - }
 - },
 - error: function (msg) {
 - alert(msg.responseText);
 - }
 - })
 - })
 
好了,三種最常用的調(diào)用方式就這樣了,當(dāng)然,你可以稍微修改一下連接上數(shù)據(jù)庫一起使用,***我總結(jié)一下,在調(diào)用過程常見的錯誤及解決方法。
一、推薦使用Firebug去調(diào)試,在Firebug中有一個“網(wǎng)絡(luò)”選項(xiàng)卡,在那里,你可以清楚的看到你是否成功調(diào)用WCF服務(wù),而且可以看到返回的數(shù)據(jù)格工及詳細(xì)內(nèi)容,而且如果調(diào)用出錯,也可以給出明確的出錯信息。
二、在調(diào)試階端,推薦使用“GET”方式請求服務(wù),然后在error:funcation(msg){alert(msg.responseText);}這樣同樣也能看到大部份出錯提示。
三、配置文件,在添加時就自動配置好了,所以一般情況下沒有特殊要求無需更改。這是VS2010中的好處。
原文鏈接:http://www.cnblogs.com/bdqlaccp/archive/2011/05/08/2039415.html
【編輯推薦】
















 
 
 
 
 
 
 