如何:在不使用配置的情况下添加 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 服务

  1. 通过用 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…
    
    }
    
  2. 使用 CalculatorService 实现 ICalculator 服务协定。

    public class CalculatorService : ICalculator
    {
        public double Add(double n1, double n2)
        {
            return n1 + n2;
        }
    
    //Other operations omitted…
    
  3. 定义 ICalculatorCalculatorService 实现的命名空间,方法是将它们放置在一个命名空间块中。

    Namespace Microsoft.Ajax.Samples
    {
        //Include the code for ICalculator and Caculator here.
    }
    

在不使用配置的情况下在 Internet 信息服务中承载服务

  1. 在应用程序中创建一个名为 service 的新文件(扩展名为 .svc)。编辑此文件,在其中为服务添加适当的 @ServiceHost 指令信息。指定在 @ServiceHost 指令中使用 WebScriptServiceHostFactory 来自动配置 ASP.NET AJAX 终结点。

    <%@ServiceHost 
        language=c# 
        Debug="true" 
        Service="Microsoft.Ajax.Samples.CalculatorService"
        Factory=System.ServiceModel.Activation.WebScriptServiceHostFactory
    %>
    
  2. 生成服务并从客户端调用该服务。在调用该服务时,Internet 信息服务 (IIS) 会将其激活。有关在 IIS 中承载的更多信息,请参见如何:在 IIS 中承载 WCF 服务

调用服务

  1. 在相对于 .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 扩展宿主

另请参见

任务

如何:将启用了 AJAX 的 ASP.NET Web 服务迁移到 WCF

概念

为 ASP.NET AJAX 创建 WCF 服务