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绑定模型。
【编辑推荐】