ASP.NET AJAX的WCF服務(wù)
現(xiàn)在,我們將了解更多傳統(tǒng)的WCF服務(wù)實(shí)現(xiàn),并且我們也將了解如何通過ASP.NET AJAX向外暴露該服務(wù)。默認(rèn)情況下,當(dāng)我們創(chuàng)建類庫工程時(shí),對于需要運(yùn)行的WCF系統(tǒng)不會(huì)添加服務(wù)模型和對運(yùn)行時(shí)序列化的支持。因此,我們不得不添加必要的服務(wù)引用。
繼續(xù)并點(diǎn)擊類庫工程鼠標(biāo)右鍵然后選擇添加引用,再選擇如下引用:
◆System.Runtime.Serialization
◆System.ServiceModel
在本階段,我們將使用一個(gè)TODO管理示例來演示整個(gè)過程。添加一個(gè)基于數(shù)據(jù)庫的服務(wù)然后創(chuàng)建一個(gè)帶有字段為ID, Description和Status 的標(biāo)TODO?,F(xiàn)在,從項(xiàng)目模板中添加一個(gè)LINQ to SQL的類文件。從數(shù)據(jù)庫中拖拽TODO表到LINQ to SQL類文件設(shè)計(jì)器上。
現(xiàn)在添加設(shè)計(jì)器表面并從屬性窗口改變序列化模式為單向的。現(xiàn)在,我們的設(shè)計(jì)器就生成了可以供WCF使用的LINQ to SQL類。如果你想使用自定義用戶定義類型,你必須為你的類設(shè)置[DataContract]特性并且你必須為你想暴露的WCF服務(wù)類的每個(gè)屬性添加 [DataMember]特性。
現(xiàn)在,我們將添加一個(gè)如下形式的服務(wù)接口:
- namespaceServiceLibrary
- {
- [ServiceContract(Namespace="ServiceLibrary")]
- interfaceIToDoService
- {
- [OperationContract]
- ToDoGetToDo(longID);
- [OperationContract]
- ToDoAddToDo(ToDotoDo);
- [OperationContract]
- boolDeleteToDo(ToDotodo);
- [OperationContract]
- ToDoUpdateToDo(ToDotodo);
- [OperationContract]
- List<ToDo>GetAllToDo();
- }
- }
注意,在ServiceContract 接口特性中我們已經(jīng)提到的一個(gè)命名空間。這點(diǎn)非常重要。我們將使用該名字作為服務(wù)的名稱以便內(nèi)部的JavaScript代碼訪問該服務(wù)?,F(xiàn)在,我們將添加實(shí)現(xiàn)該服務(wù)的接口;其代碼如下。
請注意代碼中在類特性上所使用的[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]特性;這對于以ASP.NET AJAX啟用WCF服務(wù)暴露的方式是必須的。
- namespaceServiceLibrary
- {
- [AspNetCompatibilityRequirements(RequirementsMode=
- AspNetCompatibilityRequirementsMode.Allowed)]
- publicclassToDoService:IToDoService
- {
- #regionIToDoServiceMembers
- publicToDoGetToDo(longID)
- {
- DataClasses1DataContextcontext=newDataClasses1DataContext();
- vartoDos=frompincontext.ToDos
- wherep.ID==ID
- selectp;
- List<ToDo>listTodos=toDos.ToList();
- if(listTodos!=null&&listTodos.Count>0)
- {
- returnlistTodos[0];
- }
- else
- {
- returnnull;
- }
- }
- #endregion
- }
- }
以上是ASP.NET AJAX的WCF服務(wù)
【編輯推薦】