使用 Windows Communication Foundation (WCF) 可以创建服务来公开支持 ASP.NET AJAX 并且可从客户端网站上的 JavaScript 中调用的终结点。 若要创建这样的终结点,可以使用配置文件(与使用所有其他 WCF 终结点一样),或使用不要求任何配置元素的方法。 本主题演示第二种方法。
若要在不使用配置的情况下创建具有 ASP.NET AJAX 终结点的服务,则必须由 Internet 信息服务 (IIS) 来承载创建的服务。 若要使用此方法激活 ASP.NET AJAX 终结点,请在 .svc 文件内的 @ServiceHost 指令中指定 WebScriptServiceHostFactory 作为 Factory 参数。 此自定义工厂是一个组件,可自动将 ASP.NET AJAX 终结点配置为可以从客户端网站上的 JavaScript 中调用。
有关有效示例,请参阅不含配置的 AJAX 服务。
有关如何使用配置元素配置 ASP.NET AJAX 终结点的概述,请参阅如何:使用配置添加 ASP.NET AJAX 终结点。
创建基本 WCF 服务
通过用 ServiceContractAttribute 属性标记的接口定义基本 WCF 服务协定。 用 OperationContractAttribute 标记每个操作。 确保设置 Namespace 属性。
[ServiceContract(Namespace = "MyService")]] public interface ICalculator { [OperationContract] // This operation returns the sum of d1 and d2. double Add(double n1, double n2); //Other operations omitted… }
使用
ICalculator
实现CalculatorService
服务协定。public class CalculatorService : ICalculator { public double Add(double n1, double n2) { return n1 + n2; } //Other operations omitted…
定义
ICalculator
和CalculatorService
实现的命名空间,方法是将它们放置在一个命名空间块中。Namespace Microsoft.Ajax.Samples { //Include the code for ICalculator and Calculator here. }
在不使用配置的情况下在 Internet 信息服务中承载服务
在应用程序中创建一个名为 service 的新文件(扩展名为 .svc)。 编辑此文件,在其中为服务添加适当的 @ServiceHost 指令信息。 指定在 WebScriptServiceHostFactory 指令中使用 WebScriptServiceHostFactory 来自动配置 ASP.NET AJAX 终结点。
<%@ServiceHost language=c# Debug="true" Service="Microsoft.Ajax.Samples.CalculatorService" Factory=System.ServiceModel.Activation.WebScriptServiceHostFactory %>
生成服务并从客户端调用该服务。 在调用该服务时,Internet Information Services (IIS) 会将其激活。 有关在 IIS 中托管的详细信息,请参阅如何:在 IIS 中托管 WCF 服务。
调用服务
- 在相对于 .svc 文件的空地址处配置终结点,这样便可以使用该服务了,并且通过向 service.svc/<操作>(例如,表示
Add
操作的 service.svc/Add)发送请求来调用该服务。 可以通过在 ASP.NET AJAX 脚本管理器控件的“脚本”集合中输入服务 URL 来使用响应的服务。 有关示例,请参阅不含配置的 AJAX 服务。
示例
在相对于基 URL 的空地址处创建自动配置的终结点。 使用此方法也可以添加和使用配置文件。 如果配置文件包含终结点定义,则这些终结点将添加到自动配置的终结点中。
例如,service.svc 使用 WebScriptServiceHostFactory,而服务目录包含一个 Web.config 文件,该文件在“soap”相对地址处使用 BasicHttpBinding 定义同一服务的终结点。 在这种情况下,服务将包括两个终结点:一个在 service.svc 处(该终结点响应 ASP.NET AJAX 请求),另一个在 service.svc/soap 处(该终结点响应 SOAP 请求)。
如果配置文件在空相对地址处定义一个终结点并且使用 WebScriptServiceHostFactory,则将引发异常且无法启动服务。
不能使用配置来修改自动配置终结点上的设置。 如果必须修改某些设置(如读取器配额),不得通过从 .svc 文件移除 WebScriptServiceHostFactory 并创建终结点的配置项来使用免配置方法。
如果服务要求 ASP.NET 兼容模式(例如,如果服务使用 HttpContext 类或 ASP.NET 授权机制),则仍需要配置文件来启用此模式。 所需的配置元素为 <serviceHostingEnvironment> 元素,必须按如下所示添加该元素。
<system.serviceModel>
<serviceHostingEnvironment aspNetCompatibilityEnabled="true" /> </system.serviceModel>
有关详细信息,请参阅 WCF 服务和 ASP.NET 主题。
WebScriptServiceHostFactory 类是 ServiceHostFactory 的派生类。 有关服务主机工厂机制的详细介绍,请参阅使用 ServiceHostFactory 扩展主机主题。