jQuery調用WCF服務傳遞JSON對象

來源:互聯網
上載者:User

http://developer.51cto.com/art/200906/128643.htm

下面這個樣本使用了WCF去建立一個服務連接埠從而能夠被ASP.Net頁面通過jQuery的AJAX方法訪問,我們將在用戶端使用Ajax技術來 與WCF服務進行通訊。這裡我們僅使用jQuery去串連Web Service,而不去使用ASP.Net AJAX庫,至於為什麼不使用AJAX庫中,那是因為我們在項目中已經使用了jQuery,而它已經能處理全部的AJAX請求和所有功能,並且,如果我們 一旦使用ASP.NET AJAX庫,我們也必須多包含一個超過80Kb的資料量(偵錯模式下會更大),但這也不是說ASP.NET AJAX庫不實用,事實上,如果使用了相同的類庫,我們能夠少寫很多的額外代碼,但這個例子就是為了說明,在沒有一個好的用戶端代理的情況下,我們是如何調用Web服務的。

WCF 服務:

我們先建立一個WebSite,然後添加一個AJAX-enabled WCF Service,從而建立WCF服務。(請確保你使用了正確的.Net Framework 版本,我用的是3.5) 

在我們添加完service後,它會自動進入該service的後置代碼檔案,Go ahead and browse around the file for a second.

首先我們要做的是找到"AspNetCompatibilityRequirements"並將其值置為 "Allowed":

[AspNetCompatibilityRequirements( RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed )]  

這個屬性的設定可將我們的服務跑在ASP.NET compatibility模式,如果我們未將該值設為"Allowed",那麼就無法通過ASP.Net去訪問到該服務,這個屬性是當你添加 "AJAX-enabled WCF Service" 時自動產生的。更多祥細請參看MSDN。

現在再來看自動產生的後置代碼檔案,我們能發現已經存在了一個被標註了"OperationContract"特性的"DoWork()" 的方法,這個方法是自動產生的,我們將使用這個方法來完成下面的樣本。我們再來為該方法添加一個"WebGet"的特性,並設"RequestFormat" 的值為 "Json." 我們再來為該方法加上另外的一個特性RequestFormat,WebGet 和Get動詞一樣,作用於一個UriTemplate(本文不對此作進一步討論),RequestFormat 特性可以讓我們接收JSON格式的請求。

我們的 "DoWork()" 方法如下:

 [OperationContract]    [WebGet( RequestFormat=WebMessageFormat.Json )]    public void DoWork()    {        // Add your operation implementation here        return;    }  

對象的模型:

我們希望通過"DoWork()" 來傳遞一個叫“Person”的對象,那先來建立一個Person對象寫入到當前類的頭部,其包含欄位和屬性(Name, Age 和 the types of Shoes they own),這個類同時也作為所傳遞JSON的結構。

 [Serializable]    [DataContract( Namespace = "http://www.dennydotnet.com/", Name = "Person" )]    public class Person    {        private string _name = string.Empty;        private int _age = 0;          [DataMember( IsRequired = true, Name = "Name" )]        public string Name        {            get { return _name; }            set { _name = value; }        }          [DataMember( IsRequired = true, Name = "Age" )]        public int Age        {            get { return _age; }            set { _age = value; }        }          [DataMember( IsRequired = true, Name = "Shoes" )]        public List<String> Shoes;    }          

我們已經為 "Person”類的名稱和命名空間標註上了契約,我們仍需要為屬性授於資料成員特性,為每個屬性 設定"IsRequired"並具體指定其名稱。你只需要具體指定名字,如果它和屬性名稱不一樣。舉例來說吧,如果你有一個屬性叫作“Level”,但你在 資料成員特性中賦值為“Rank”,現在我們要回去修改我們的“DoWork()”方法,去接收Person對象作為參數。具體參下面代碼塊。

 [OperationContract]    [WebGet( RequestFormat=WebMessageFormat.Json )]    public void DoWork(Person p)    {        // Add your operation implementation here        return;    }      

對Web.Config檔案進行配置: 
我們僅需對web.config檔案做出很小的修改就能對服務進行訪問了。首先加入一個 serviceBehavior 用來允許Http Get請求,再添加一些調試選項協助。代碼如下:

Below </endpointBehaviors>

<serviceBehaviors>        <behavior name="ServiceAspNetAjaxBehavior">            <serviceMetadata httpGetEnabled="true" httpGetUrl="" />            <serviceDebug httpHelpPageEnabled="true" includeExceptionDetailInFaults="true" />   

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.