可以从任何启用了 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 编程模型来自定义这些基本方面。 例如,可以使用 WebGetAttribute 或 WebInvokeAttribute 属性来控制作响应的 HTTP 谓词,或使用 UriTemplate
这些相应属性的属性来指定自定义 URI。 有关详细信息,请参阅 WCF Web HTTP 编程模型 主题。
JSON 数据格式通常用于 AJAX 服务。 若要创建一个返回 JSON 而不是 XML 的操作,请将 ResponseFormat 或 ResponseFormat 属性设置为 Json。 Stand-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 服务。