技术开发 频道

在ASP.NET3.5 AJAX开发中调用WCF服务


二、 创建示例网站
    启动Visual Studio 2008并选择“ASP.NET Web Site”模板新创建一个示例网站AJAXWCFTest1,同时选择Visual C#作为内置支持语言,如图1所示。在此工程中,我们将添加一个WCF(Windows通信基础)服务来测试从客户端以AJAX(异步)方式调用这个WCF服务。 
   
    图1 使用VS2008构建支持WCF服务的AJAX ASP.NET网站

    注意,在ASP.NET 3.5中已经内置了对于ASP.NET AJAX框架三大组成之一的核心部分(即Extensions)的支持。而要进行ASP.NET AJAX客户端中心型编程或应用ASP.NET AJAX Control Toolkit组件,则还需要另行安装与引用相应的程序集和脚本。

三、 添加WCF服务
    现在,我们来学习如何在前面的ASP.NET网站中添加一个支持AJAX功能的WCF服务。为此,请右击上面的示例网站AJAXWCFTest1并选择“Add New Items…”,在随后出现的“Add New Items”对话框中选择“AJAX-Enabled WCF Service”模板添加一个新的WCF服务并命名为TimeService。 
   
    图2 添加支持AJAX技术的WCF服务
   
    通过上面的操作后,你会发现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绑定模型。

0
相关文章