如何:在不使用配置的情况下添加 ASP.NET AJAX 终结点
使用 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 扩展主机主题。