ASP.NET應用程序的WCF服務
ASP.NET應用程序添加WCF服務
現在,我們來學習如何在前面的ASP.NET網站中添加一個支持AJAX功能的WCF服務。為此,請右擊上面的示例網站AJAXWCFTest1并選擇“Add New Items…”,在隨后出現的“Add New Items”對話框中選擇“AJAX-Enabled WCF Service”模板添加一個新的WCF服務并命名為TimeService。
通過上面的操作后,你會發現Web網站中添加了一個服務端點(即timeservice.svc)以及與之相聯系的位于文件夾App_Code下的 Code-behind文件timeservice.cs。此外,還注意到,配置文件web.config也被修改以便為剛剛創建的WCF服務提供相應的注冊和發現信息。
現在創建的這個TimeService類中已經隱含地描述了所定義WCF服務的契約及其顯式實現。注意,其中的ServiceContract和OperationContract屬性承擔了與以前的WCF版本編程中同樣的角色。另外,為了簡化起見,在此沒有使用接口定義契約。
- using System;
- using System.Runtime.Serialization;
- using System.ServiceModel;
- using System.ServiceModel.Activation;
- using System.ServiceModel.Web;
- [ServiceContract (Namespace = "Samples.Services")]
- [AspNetCompatibilityRequirements(
- RequirementsMode=AspNetCompatibilityRequirementsMode.Allowed)]
- public class TimeService
- ...{
- [OperationContract]
- public DateTime GetTime()
- ...{
- return DateTime.Now;
- }
- [OperationContract]
- public string GetTimeFormat(string format)
- ...{
- return DateTime.Now.ToString(format);
- }
- }
注意到,上面的TimeService類共暴露了兩個公共端點,分別是GetTime和GetTimeFormat。
到達上面接口中方法的端點定義于一個SVC文件中。下面給出了文件timeservice.svc的內容:
- <%@ ServiceHost Language="C#"
- Debug="true"
- Service="TimeService"
- CodeBehind="~/App_Code/TimeService.cs" %>
這個服務宿主(ServiceHost)指明了實現該服務使用的語言以及相應的源文件的位置,***通過Service屬性標識所使用的契約名字。
在正式開始測試這個服務前還有***一項工作就是在宿主ASP.NET應用程序的配置文件web.config中注冊上面這個WCF服務。下面展示了配置文件web.config中的相關配置節的內容:
- <system.serviceModel>
- <behaviors>
- <endpointBehaviors>
- <behavior name="TimeServiceAspNetAjaxBehavior">
- <enableWebScript />
- </behavior>
- </endpointBehaviors>
- </behaviors>
- <serviceHostingEnvironment aspNetCompatibilityEnabled="true" />
- <services>
- <service name="TimeService">
- <endpoint address=""
- behaviorConfiguration="TimeServiceAspNetAjaxBehavior"
- binding="webHttpBinding"
- contract="TimeService" />
- </service>
- </services>
- </system.serviceModel>
注意,上面的配置內容是隨著WCF服務的創建由系統自動生成的。
在此,首先針對前面WCF服務中的所有端點注冊一個行為列表。通過這種方式,為WCF服務TimeServiceAspNetAjaxBehavior定義了一個行為并且指出它使用客戶端腳本經由HTTP Web協議接受請求。從邏輯上分析,上面的enableWebScript元素與ASP.NET Web服務中用于修飾Web服務類的ScriptService屬性是一致的。
然后,需要枚舉宿主于當前ASP.NET應用程序中的所有WCF服務。注意,上面的web.config文件中僅展示了一個名字為TimeService的服務,它的一個端點使用了TimeService契約和webHttpBinding綁定模型。
【編輯推薦】