关于”System.ServiceModel.Activation.WebServiceHostFactory“与"<webHttp/>"以及RestFul/启用了Ajax的WCF服务

N久以前,曾看到园子里有一些wcf爱好者总是问:为啥启用了ajax的wcf对应的svc总要加一句Factory=System.ServiceModel.Activation.WebServiceHostFactory

昨天无意在网上闲逛时,发现了msdn官方的解释,转贴于此,希望对大家有帮助:

原文地址: http://msdn.microsoft.com/zh-cn/bb885100.aspx

创建不使用 ASP.NET 的 WCF AJAX 服务

Windows Communication Foundation (WCF) AJAX 服务可以从任何支持 Javascript 的网页进行访问,而不需要使用 ASP.NET AJAX。本主题描述如何创建此类 WCF 服务。

有关如何将 WCF 与 ASP.NET AJAX 一起使用的说明,请参见为 ASP.NET AJAX 创建 WCF 服务

创建 WCF AJAX 服务包括三个部分:

  • 创建一个可以从浏览器中访问的 AJAX 终结点。
  • 创建一个与 AJAX 兼容的服务协定。
  • 访问 WCF AJAX 服务。

创建 AJAX 终结点

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

<%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>


有关可运行示例,请参见AJAX Service with JSON and XML Sample

创建与 AJAX 兼容的服务协定

默认情况下,通过 AJAX 终结点公开的服务协定将以 XML 格式返回数据。而且,默认情况下,通过对包含跟有操作名称的终结点地址的 URL 发出 HTTP POST 请求,将可以访问服务操作,如下面的示例所示。

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


此操作可通过对 http://serviceaddress/endpointaddress/GetCities 发出 HTTP POST 请求进行访问,并会返回一条 XML 消息。

可以使用完整的 Web 编程模型来自定义这些基本方面。例如,可以使用 WebGetAttributeWebInvokeAttribute 属性 (Attribute) 来控制操作响应的 HTTP 谓词,或使用各个属性 (Attribute) 的 UriTemplate 属性 (Property) 来指定自定义 URI。有关更多信息,请参见 Web 编程模型主题。

AJAX 服务中经常使用 JSON 数据格式。若要创建返回 JSON 而非 XML 的操作,请将 ResponseFormat(或 ResponseFormat)属性设置为 Json独立 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”)的 HTTP POST 请求将被视为 XML。

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

用户将负责决定如何创建对终结点的 HTTP 请求。另外,用户还可以完全控制如何构造构成请求主体的 JSON。有关通过 JavaScript 创建请求的示例,请参见AJAX Service with JSON and XML Sample

 

时间: 2024-09-20 06:07:29

关于”System.ServiceModel.Activation.WebServiceHostFactory“与"<webHttp/>"以及RestFul/启用了Ajax的WCF服务的相关文章

未能从程序集“System.ServiceModel”中加载类型“System.ServiceModel.Activation.HttpModule”。

在Windows Server 2008中的IIS服务器中部署WCF服务程序时,通过浏览器访问报出如下错误: "/TestService"应用程序中的服务器错误. 未能从程序集"System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"中加载类型"System.ServiceModel.Activation.HttpModule".

Could not load type System.ServiceModel.Activation.HttpModule解决办法

Could not load type 'System.ServiceModel.Activation.HttpModule' from assembly 'System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.] 上网搜了下,问题产生的原因是在安装了IIS后又装了其他版本的framework, 导致assemble中的版本和程序使用的版本不一致了.解决办法是使用 aspne

WCF调试异常信息:找不到类型“”,在 ServiceHost 指令中提供为 Service 特性值,或在配置元素 system.serviceModel/serviceHosting

"/CommonHelpServices"应用程序中的服务器错误. 找不到类型"JianKunKing.Common.CommonHelp.Services.Service1",它在 ServiceHost 指令中提供为 Service 特性值,或在配置元素 system.serviceModel/serviceHostingEnvironment/serviceActivations 中提供. 说明: 执行当前 Web 请求期间,出现未经处理的异常.请检查堆栈跟踪

IIS 未能从程序集“System.ServiceModel, Version=3.0.0.0, Culture=neutral,

在Windows Server 2008中的IIS服务器中部署WCF服务程序时,通过浏览器访问报出如下错误: 未能从程序集"System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"中加载类型"System.ServiceModel.Activation.HttpModule" 原因: 这是因为先安装了 .NET Framework 4,随后启用了 .

引发的异常:“System.ServiceModel.Security.MessageSecurityException”(位于 mscorlib.dll 中)

问题描述 服务端配置<system.serviceModel><services><servicename="KeYun.Services.Service"behaviorConfiguration="WSBehavior"><endpointaddress="mex"binding="mexHttpBinding"contract="IMetadataExchange&qu

System.ServiceModel.CommunicationException: 接收HTTP 响应时发生错误

具体错误信息如下: System.ServiceModel.CommunicationException: 接收对 http://110.110.110.110/TestService/TestService.svc 的 HTTP 响应时发生错误.这可能是由于服务终结点绑定未使用 HTTP 协议造成的.这还可能是由于服务器中止了 HTTP 请求上下文(可能由于服务关闭)所致.有关详细信息,请参见服务器日志. ---> System.Net.WebException: 基础连接已经关闭: 接收时发

回调函数报System.ServiceModel.Channels.ServiceChannel无法用于通信

问题描述 请教一个WCF的问题,当客户端软件报错退出以后,再重新登录客户端的时候,登录函数中有一个回调函数,报这样的错误,应该如何解决?通信对象System.ServiceModel.Channels.ServiceChannel无法用于通信,因为其处于"出错"状态." 解决方案

无法读取配置节 system.serviceModel 因为它缺少节声明的解决方法_win服务器

在Windows Server2008 R2中的IIS7中部署WCF服务时报出如题错误: HTTP 错误 500.19 - Internal Server Error无法访问请求的页面,因为该页的相关配置数据无效. 详细错误信息模块 IIS Web Core 通知 未知 处理程序 尚未确定 错误代码 0x80070032 配置错误 无法读取配置节"system.serviceModel",因为它缺少节声明. 解决办法:在"服务器管理器"的"功能"

jQuery调用RESTful WCF示例代码

 本篇文章主要介绍了jQuery调用RESTful WCF示例代码(GET方法/POST方法),需要的朋友可以过来参考下,希望对大家有所帮助 不废话了,直奔主题吧   wcf端:   近几年比较流行restful,为了能让ajax调用,同时也为了支持restful风格的uri,在创建一个Ajax-enabled Wcf Service后,必须手动修改svc文件,指定Factory,即:   <%@ ServiceHost Language="C#" Debug="tru