用JQuery AJAX調用WCF服務

來源:互聯網
上載者:User

在網路上經常看到一些初學者提問怎麼在AJAX中或用Javascript調用WCF服務,本文將簡要給初學者介紹如何在AJAX中或用Javascript調用WCF服務以及注意事項。為了便於講解,我們首先建立一個WCF服務,服務和服務資料定義如下:

    //資料契約    [DataContract]    public class Person    {        [DataMember]        public int ID { get; set; }        [DataMember]        public string Name { get; set; }    }    //WCF服務,為了能使js調用,必須設定AspNetCompatibilityRequirements為Allowed或Required    [ServiceContract(Namespace = "")]    [AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]    public class PersonService    {        //服務功能1        [OperationContract]        [WebGet]        public Person GetOnePerson()        {            return new Person { ID = 1, Name = "cokkiy" };        }        //服務功能2        [OperationContract]        [WebGet]        public List<Person> GetPorsons(int id, string name)        {            return new List<Person>() { new Person { ID=1,Name="cokkiy"},                 new Person { ID=id,Name=name} };        }    }

Ok,我們先看一下服務定義,為了使AJAX或JS調用服務,必須標記服務的AspNet相容模式為Allowed或Required。其次,操作契約必須標記為WebGet或WebInvoke,WebGet屬性標記了一個可以用http get方法調用的操作,而WebInvoke屬性標記了一個可以用http post方法調用的操作。

再來看服務組態檔:

<system.serviceModel>        <behaviors>            <endpointBehaviors>                <behavior name="AjaxWCFWeb.Services.PersonServiceAspNetAjaxBehavior">                    <enableWebScript/>                </behavior>            </endpointBehaviors>        </behaviors>        <serviceHostingEnvironment aspNetCompatibilityEnabled="true"/>        <services>            <service name="AjaxWCFWeb.Services.PersonService">                <endpoint address="" behaviorConfiguration="AjaxWCFWeb.Services.PersonServiceAspNetAjaxBehavior" binding="webHttpBinding" 
contract="AjaxWCFWeb.Services.PersonService"/> </service> </services> </system.serviceModel>

這裡注意,設定檔中,必須提供基於webHttpBinding的綁定,否則就不能從js中調用。並且,必須設定serviceHostingEnvironment 為aspNetCompatibilityEnabled。

下面來看如何在js中調用我們剛才建立的WCF服務,我們用JQuery的ajax功能。

    <p>       <button id="getOnePerson" type="button">Get One Person</button>       <button id="getPersons" type="button">Get Persons</button>    </p>    <script type="text/javascript">        $(document).ready(function() {            $('#getOnePerson').click(function() {                $.getJSON("/Services/PersonService.svc/GetOnePerson", {}, function(data) {                    alert("ID:" + data.d.ID + " Name:" + data.d.Name);                });            });            $('#getPersons').click(function() {                $.getJSON("/Services/PersonService.svc/GetPorsons", { id: 100, name: "from clent" }, function(data) {                    alert(data.d.length);                    for (var i = 0; i < data.d.length; i++) {                        alert("ID:" + data.d[i].ID + " Name:" + data.d[i].Name);                    }                });            });        });    </script>

由於我們用的是JQuery的AJAX函數,因此調用方式非常簡單,熟悉JQuery AJax的朋友一看就明白了,這種調用方式跟調用其他方法幾乎完全一樣,差別在於返回的資料,請注意我們真正的資料在data.d中。

總結:1)WCF服務必須標記為AspNetCompatibilityRequirements為Alowed或Requered。

         2)服務中的操作(Operation)必須標記為WebGet或WebInvoke。

         3)服務配置中必須提供webHttpBinding綁定,並設定服務的運行環境為aspNetCompatibilityEnabled。

         4)返回的資料在屬性d中。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.