亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > JavaScript > 正文

jQuery Ajax調用WCF服務詳細教程

2019-11-20 12:49:44
字體:
來源:轉載
供稿:網友

這兩天在寫基于WCF服務的后臺框架,過程中遇到了一些挫折,經過努力全部解決了,在此分享給大家,使用的工具是Visual Studio 2013。

該后臺需要支持通過json來傳遞和接收數據。

首先,說說搭建過程。

第一步:創建WCF服務應用程序項目WCF。

第二步,創建服務使用的數據類

using System;using System.ComponentModel.DataAnnotations;using System.ComponentModel.DataAnnotations.Schema;using System.Runtime.Serialization;namespace WCF{  [DataContract]  [Table("TUser")]  public class Person  {    [DataMember]    public int ID { get; set; }    [DataMember]    [StringLength(100)]    public string LoginName { get; set; }    [DataMember]    [StringLength(100)]    public string Password { get; set; }    [DataMember]    [DataType(DataType.Date)]    public DateTime CreateDate { get; set; }  }}

這里,由于我使用EF來與數據庫交互,所以使用了Table、StringLength、DataType。若你未使用EF,可以不加這些。DataContract是用來標志當前類在序列化時需要參考DataMember屬性,若不設DataContract或僅設置DataMember,則所有共有屬性和字段全部序列化,否則,只對設置有DataMember的序列化。注意,DataContract和DataMember與反序列化無關,也就是說,當把一個json對象字符串傳遞給WCF服務時,不管該字段上是否有DataMember,都會被反序列化。

第三步:創建服務契約接口

如果你的服務僅僅用來提供Ajax等一些非WCF客戶端訪問的,那么是不需要接口的,把接口定義中的各種Attribute直接加在服務提供的類的定義上即可。但是為了能讓程序可以通過服務接口來訪問,那么必須使用接口,例如:前端MVC+后臺WCF的架構形式。

using System.Collections.Generic;using System.ServiceModel;using System.ServiceModel.Web;namespace WCF{  [ServiceContract]  public interface IPersonService  {    [OperationContract]    [WebInvoke(Method = "POST", RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.WrappedRequest)]    Person CreatePerson(string loginName, string password);    //服務功能2    [OperationContract]    [WebGet(RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.WrappedRequest)]    bool CheckMan(string loginName);  }}

第四步,創建基于契約接口提供實際服務的類

由于我的服務需要支持Ajax,所以選擇“WCF服務(支持Ajax)”一項,具體代碼如下:

using System;using System.Collections.Generic;using System.ServiceModel.Activation;namespace WCF{  [AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]  public class PersonService : IPersonService  {    public Person CreatePerson(string loginName, string password)    {      return new PersonBLL().CreatePerson(loginName,password);    }    public bool CheckMan(string loginName)    {      return new PersonBLL().CheckMan(loginName);    }  }}

上述的PersonBLL是用來實際處理數據的業務邏輯層,有興趣的伙伴們可以自己寫個簡單的實現。

第五步,創建網頁客戶端。

在此為了避免處理跨域問題,故把網頁post_get_test.html放在WCF項目下。

<!DOCTYPE html><html xmlns="http://www.w3.org/1999/xhtml"><head>  <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />  <script type="text/javascript" src="jquery-1.10.2.js"></script>  <script type="text/javascript" src="jqueryjson.js"></script>  <title></title></head><body>  <p>    <input id="createPerson" type="button" value="POST_CreatePerson" /><br>    <input id="checkMan" type="button" value="GET_CheckMan" /><br>    <input type="text" id="loginName" />    <input type="text" id="password" />  </p>  <script type="text/javascript">    $(document).ready(function () {      $('#createPerson').click(function () {        $.ajax({          type: "post",          url: "personservice.svc/CreatePerson",          data: '{"loginName":"' + $("#loginName").val() + '","password":"' + $("#password").val() + '"}',          contentType: "application/json; charset=utf-8",          dataType: "json",          success: function (data) {            alert("ID:" + data.d.ID + " Name:" + data.d.LoginName + " Password:" + data.d.Password + " CreateDate:" + data.d.CreateDate);          },          error: function (xhr) {            alert(xhr.responseText);          }        });      });      $('#checkMan').click(function () {        $.getJSON("PersonService.svc/CheckMan", 'loginname="' + $("#loginName").val() + '"',          function (data) {            alert(data.d);          });      });    });  </script></body></html>

建議在開發過程中采納createPerson按鈕調用方式來寫,其可以通過error回調函數來反饋實際出錯原因,方便調試。

第六步,發布WCF服務

右擊WCF項目選擇“發布”菜單項,在彈出窗口中的下拉列表中選擇“新建配置文件”,輸入配置文件名稱,點擊“確定”按鈕后進入連接設置界面,如下:

'

我是發布在本機的IIS中,故選擇Web Deply發布方法,同時,這里建議服務器和站點名稱設置成:localhost和default web site/XXX,這里XXX可以由你自己定義個服務站點的名字(實際就是IIS默認站點的虛擬目錄名稱),這樣,你的開發伙伴獲取到該項目源碼后,能發布到完全相同的環境中,避免由于環境的差異延伸出一系列問題。

設置完畢后,點擊“驗證連接”,出現綠色的鉤鉤,說明設置正確,點擊“發布”即可。

第七步,實測

1、現在可以通過瀏覽器訪問http://localhost/wcf/personservice.svc來確認服務器端是否部署成功,出現如下界面說明部署成功。

2、通過瀏覽器訪問測試網頁http://localhost/wcf/post_get_test.html來檢查功能是否OK。

其次,下面說說我在搭建過程中出現的各種問題。

1、網頁通過Ajax調用服務的CreatePerson方法時把方法類型寫錯了,POST寫成了GET,結果系統報:405 (Method Not Allowed)。另外,根據微軟官網中描述,若通過soap訪問一個WCF WEB HTTP應用程序(使用 WebHttpBinding 和 WebHttpBehavior 的服務)也會出現405錯誤。

2、web.config文件中endpoint節點的contract屬性配置錯誤,沒有指向WCF.IPersonService,網頁執行時報:500 (System.ServiceModel.ServiceActivationException);在用http://localhost/wcf/personservice.svc檢驗服務器端部署結果時,報:在服務“PersonService”實現的協定列表中找不到協定名稱“VME.Contract.PersonService”。

這里需要說明的是若你的服務不是基于接口的,則endpoint的contract直接指向服務類即可。

3、在使用jQuery的ajax并以POST方式傳值給服務器時,由于格式錯誤,報如下錯誤:500 (Internal Server Error),詳細信息為:格式化程序嘗試對消息進行反序列化時引發異常。正確的有兩種處理方式:

1)以json格式對象的方式傳遞,例如:

復制代碼 代碼如下:

{"loginName":"name","password":"pwd"}

這里要強調的是鍵值對中,鍵必須加雙引號,且大小寫必須與服務方法中的形參定義完全一樣。
2)以json格式對象字符串的形式傳遞,具體如下:

POST方式傳值

A)傳入非對象參數:

復制代碼 代碼如下:

{"loginName":"name","password":"pwd"}'

這里要強調的是鍵值對中,鍵必須加雙引號,且大小寫必須與服務方法中的形參定義完全一樣,值應按如下規則設置:字符串加雙引號。
B)傳入對象參數:

復制代碼 代碼如下:

var person = {};
person.LoginName = $("#loginName").val();
person.Password = $("#password").val();
var jsonPerson = '{"person":' + $.toJSON(person) + '}';

這里要強調的是對象屬性名稱的大小寫必須與數據類的屬性定義完全一致。

GET方式傳值

A)傳入非對象參數:

復制代碼 代碼如下:

'loginname="name"'

B)傳入對象參數:

復制代碼 代碼如下:

var person = {};
person.LoginName = $("#loginName").val();
person.Password = $("#password").val();
var jsonPerson = 'person=' + $.toJSON(person);

最后,說說WCF調試。

1、建議首先通過訪問http://localhost/wcf/personservice.svc的形式確認服務器端部署成功,再進行客戶端和服務器端聯調。

2、若需要代碼從客戶端運行開始直到服務器端運行進行聯調,則必須使用同步調用,因此,使用jQuery的ajax時,必須將async設置為false。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
日韩av在线网| 91精品久久久久久久久中文字幕| 欧美亚洲视频一区二区| 欧美日韩国产一区在线| 亚洲xxxx视频| 久久香蕉国产线看观看网| 国产69精品久久久久9| 欧美黄网免费在线观看| 亚州国产精品久久久| 亚洲男人天堂2019| 日本欧美在线视频| 欧美日韩国产精品专区| 日韩中文娱乐网| 日韩经典中文字幕在线观看| 91高清视频在线免费观看| 日韩精品免费在线观看| 久久国产精品免费视频| 日韩精品视频在线| 久久中国妇女中文字幕| 国产亚洲精品一区二555| 亚洲一区国产精品| 91免费看视频.| 欧美精品做受xxx性少妇| 国产精品黄页免费高清在线观看| 日韩欧美国产一区二区| 亚洲福利视频网| 日本sm极度另类视频| 亚洲成人动漫在线播放| 欧美精品福利视频| 亚洲免费av网址| 成人在线中文字幕| 国产精品一香蕉国产线看观看| 亚洲视频第一页| 国模视频一区二区| 亚洲人成网站777色婷婷| 欧美裸体xxxx极品少妇| 91精品久久久久久久| 中文字幕av一区| 一区二区国产精品视频| 日韩中文字幕第一页| 成人中文字幕+乱码+中文字幕| 国产精品爽爽爽爽爽爽在线观看| 久久综合久久八八| 国产a∨精品一区二区三区不卡| 欧美午夜精品久久久久久浪潮| 亚洲视频axxx| 国产精品成人久久久久| 国内精品久久影院| 亚洲精品午夜精品| 欧美成人一区二区三区电影| 亚洲国产精品久久| 91在线观看免费观看| 精品福利一区二区| 欧美日韩国产丝袜另类| 亚洲夜晚福利在线观看| 午夜精品www| 色噜噜狠狠色综合网图区| 久久躁狠狠躁夜夜爽| 成人国内精品久久久久一区| 亚洲偷熟乱区亚洲香蕉av| 色中色综合影院手机版在线观看| 久久视频在线直播| 日韩大片免费观看视频播放| 国产极品jizzhd欧美| 日韩麻豆第一页| 精品人伦一区二区三区蜜桃网站| 欧美激情videos| 亚洲福利视频久久| 亚洲国产日韩欧美综合久久| 亚洲激情视频在线观看| 亚洲精品福利在线观看| 国产精品高清免费在线观看| 国产视频亚洲视频| 国产精品成人av在线| 国产亚洲欧洲黄色| 亚洲爱爱爱爱爱| 亚洲裸体xxxx| 精品国产一区二区三区久久狼黑人| 欧美性猛交xxxx乱大交| www.亚洲成人| 原创国产精品91| 欧洲一区二区视频| 欧美成人精品三级在线观看| 久久久精品电影| 在线看日韩av| 欧美日韩另类视频| 国产亚洲人成a一在线v站| 亚洲男人天堂2019| 久久手机精品视频| 亚洲va欧美va在线观看| 美女视频黄免费的亚洲男人天堂| 亚洲欧美综合另类中字| 国内精品视频一区| 午夜精品免费视频| 国产视频精品免费播放| 成人免费看吃奶视频网站| 亚洲精品电影在线| 久久人人爽人人| 欧美专区中文字幕| 在线观看欧美www| 插插插亚洲综合网| 日韩美女免费视频| 欧美极品少妇xxxxⅹ裸体艺术| 亚洲成人三级在线| 久久久久在线观看| 欧美韩日一区二区| 日韩视频在线免费观看| 欧美一级大片在线观看| 亚洲国产高清福利视频| 77777亚洲午夜久久多人| 国产剧情久久久久久| 亚洲va欧美va国产综合久久| 日韩av在线免费观看| 欧美极品少妇xxxxⅹ免费视频| 欧美日韩免费看| 欧美裸体男粗大视频在线观看| 亚洲综合中文字幕在线| 97婷婷大伊香蕉精品视频| 国产一区二区三区在线| 亚洲a一级视频| 国产亚洲视频中文字幕视频| 欧美精品免费在线观看| 日韩中文字幕在线看| 亚洲男人天堂视频| 欧美人与物videos| 欧美大肥婆大肥bbbbb| 国产成人97精品免费看片| 国产精品久久久久福利| 91在线观看免费高清完整版在线观看| 亚洲激情小视频| 欧美一级片免费在线| 久久国内精品一国内精品| 欧美精品18videos性欧美| 国产亚洲精品美女久久久| 国产精品免费网站| 久久久久久久久国产精品| 国模叶桐国产精品一区| 成人福利免费观看| 亚洲欧美国产高清va在线播| 日韩av在线资源| 国产成人精品在线播放| 国产亚洲激情在线| 亚洲黄页视频免费观看| 成人精品视频在线| 9.1国产丝袜在线观看| 91精品久久久久久久久久入口| 国产精品久久久精品| 日韩av免费在线| 在线看欧美日韩| 亚洲福利视频专区| 国产精品电影网| 91影院在线免费观看视频| 久久久久久有精品国产| 久久综合电影一区| 国产精品黄色影片导航在线观看| 欧美另类在线观看| 欧美视频第一页| 91免费高清视频| 国产91色在线播放| 国产精品久久久久久久久久99| 亚洲国产欧美精品| 欧美成人精品激情在线观看| 亚洲男人天天操| 欧美巨猛xxxx猛交黑人97人|