在没有 ASP.NET 的情况下创建 WCF AJAX 服务

可以从任何启用了 JavaScript 的网页访问 Windows Communication Foundation (WCF) AJAX 服务,而无需 ASP.NET AJAX。 本主题介绍如何创建此类 WCF 服务。

有关将 WCF 与 ASP.NET AJAX 配合使用的说明,请参阅 为 ASP.NET AJAX 创建 WCF 服务

创建 WCF AJAX 服务有三个部分:

  • 创建可从浏览器访问的 AJAX 终结点。

  • 创建与 AJAX 兼容的服务协定。

  • 访问 WCF AJAX 服务。

创建 AJAX 终结点

在 WCF 服务中启用 AJAX 支持的最基本方法是使用 WebServiceHostFactory 与服务关联的 .svc 文件中,如以下示例所示。

<%ServiceHost
    language=c#  
    Debug="true"  
    Service="Microsoft.Ajax.Samples.CityService"  
    Factory=System.ServiceModel.Activation.WebServiceHostFactory  
%>  

或者,还可以使用配置添加 AJAX 终结点。 在服务终结点上使用 WebHttpBinding,然后按照以下代码片段使用 WebHttpBehavior 配置该终结点。

<configuration>  
  <system.serviceModel>  
    <behaviors>  
      <endpointBehaviors>  
        <behavior name="AjaxBehavior">  
          <webHttp/>  
        </behavior>  
      </endpointBehaviors>  
    </behaviors>  
    <services>  
      <service name="Microsoft.Ajax.Samples.CityService">  
        <endpoint
          address="ajaxEndpoint"  
          behaviorConfiguration="AjaxBehavior"  
          binding="webHttpBinding"  
          contract="Microsoft.Ajax.Samples.ICityService" />  
      </service>  
    </services>  
  </system.serviceModel>  
</configuration>  

有关工作示例,请参阅 包含 JSON 和 XML 的 AJAX 服务

创建 AJAX-Compatible 服务协定

默认情况下,通过 AJAX 终结点公开的服务协定以 XML 格式返回数据。 此外,默认情况下,服务操作可以通过 HTTP POST 请求访问,这些 URL 包含终结点地址及其后的操作名称,如以下示例所示。

[OperationContract]  
string[] GetCities(string firstLetters);  

可以使用 HTTP POST 访问 http://serviceaddress/endpointaddress/GetCities,并返回一个 XML 消息。

可以使用完整的 Web 编程模型来自定义这些基本方面。 例如,可以使用 WebGetAttributeWebInvokeAttribute 属性来控制作响应的 HTTP 谓词,或使用 UriTemplate 这些相应属性的属性来指定自定义 URI。 有关详细信息,请参阅 WCF Web HTTP 编程模型 主题。

JSON 数据格式通常用于 AJAX 服务。 若要创建一个返回 JSON 而不是 XML 的操作,请将 ResponseFormatResponseFormat 属性设置为 JsonStand-Alone JSON 序列化主题演示内置 .NET 类型和数据协定类型如何映射到 JSON。

通常,JSON 请求和响应仅包含一项。 对于前面的 GetCities 操作,请求类似于以下语句。

"na"  

该请求的响应类似于以下语句。

["Nairobi", "Naples", "Nashville"]  

如果操作需要额外的参数,则请求格式必须包装,以便将这两个参数包装在一个 JSON 对象中。 以下示例中提供了此样式 JSON 消息的示例。

{"firstLetters": "na", "maxNumber": 2}  

下面的协定会接受此消息。

[WebInvoke(BodyStyle=WebMessageBodyStyle.WrappedRequest, ResponseFormat=WebMessageFormat.Json)]  
[OperationContract]  
string[] GetCities(string firstLetters, int maxNumber);  

访问 AJAX 服务

WCF AJAX 终结点始终接受 JSON 和 XML 请求。

将内容类型为“application/json”的 HTTP POST 请求视为 JSON,具有指示 XML 的内容类型(例如,“text/xml”)被视为 XML。

HTTP GET 请求包含 URL 本身中的所有请求参数。

由用户决定如何向终结点创建 HTTP 请求。 此外,用户还可以完全控制构造构成请求正文的 JSON。 有关从 JavaScript 创建请求的示例,请参阅 包含 JSON 和 XML 的 AJAX 服务