|
在網(wǎng)絡(luò)上經(jīng)常看到一些初學(xué)者提問(wèn)怎么在AJAX中或用Javascript調(diào)用WCF服務(wù),本文將簡(jiǎn)要給初學(xué)者介紹如何在AJAX中或用Javascript調(diào)用WCF服務(wù)以及注意事項(xiàng)。為了便于講解,我們首先創(chuàng)建一個(gè)WCF服務(wù),服務(wù)和服務(wù)數(shù)據(jù)定義如下:
//數(shù)據(jù)契約 [DataContract] public class Person { [DataMember] public int ID { get; set; } [DataMember] public string Name { get; set; } } //WCF服務(wù),為了能使js調(diào)用,必須設(shè)置ASPNETCompatibilityRequirements為Allowed或Required [ServiceContract(Namespace = "")] [ASPNETCompatibilityRequirements(RequirementsMode = ASPNETCompatibilityRequirementsMode.Allowed)] public class PersonService { //服務(wù)功能1 [OperationContract] [WebGet] public Person GetOnePerson() { return new Person { ID = 1, Name = "cokkiy" }; } //服務(wù)功能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,我們先看一下服務(wù)定義,為了使AJAX或JS調(diào)用服務(wù),必須標(biāo)記服務(wù)的ASPNET兼容模式為Allowed或Required。其次,操作契約必須標(biāo)記為WebGet或WebInvoke,WebGet屬性標(biāo)記了一個(gè)可以用http get方法調(diào)用的操作,而WebInvoke屬性標(biāo)記了一個(gè)可以用http post方法調(diào)用的操作。
再來(lái)看服務(wù)配置文件:
<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.PersonServiceASPNETAjax
Behavior" binding="webHttpBinding"
contract="AjaxWCFWeb.Services.PersonService"/> service> services> system.serviceModel>
這里注意,配置文件中,必須提供基于webHttpBinding的綁定,否則就不能從js中調(diào)用。并且,必須設(shè)置serviceHostingEnvironment 為ASPNETCompatibilityEnabled。
下面來(lái)看如何在js中調(diào)用我們剛才創(chuàng)建的WCF服務(wù),我們用JQuery的ajax功能。
<p> <button id="getOnePerson" type="button">Get One Personbutton> <button id="getPersons" type="button">Get Personsbutton> 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函數(shù),因此調(diào)用方式非常簡(jiǎn)單,熟悉JQuery AJax的朋友一看就明白了,這種調(diào)用方式跟調(diào)用其他方法幾乎完全一樣,差別在于返回的數(shù)據(jù),請(qǐng)注意我們真正的數(shù)據(jù)在data.d中。
總結(jié):1)WCF服務(wù)必須標(biāo)記為ASPNETCompatibilityRequirements為Alowed或Requered。
2)服務(wù)中的操作(Operation)必須標(biāo)記為WebGet或WebInvoke。
3)服務(wù)配置中必須提供webHttpBinding綁定,并設(shè)置服務(wù)的運(yùn)行環(huán)境為ASPNETCompatibilityEnabled。
4)返回的數(shù)據(jù)在屬性d中。
it知識(shí)庫(kù):用jQuery AJAX調(diào)用WCF服務(wù),轉(zhuǎn)載需保留來(lái)源!
鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請(qǐng)第一時(shí)間聯(lián)系我們修改或刪除,多謝。