WCF Web HTTP 编程对象模型

WCF WEB HTTP 编程模型使开发人员无需 SOAP 即可通过基本 HTTP 请求公开 Windows Communication Foundation (WCF) Web 服务。 WCF WEB HTTP 编程模型是基于现有 WCF 扩展性模型生成的。 它定义以下各类:

编程模型:

通道和调度程序基础结构:

实用工具类和扩展点:

AspNetCacheProfileAttribute

当应用于服务操作时,AspNetCacheProfileAttribute 指示配置文件中的 ASP.NET 输出缓存配置文件,应使用该配置文件在 ASP .NET 输出缓存中缓存来自操作的响应。 此属性仅采用一个参数,即指定配置文件中的缓存设置的缓存配置文件名称。

WebGetAttribute

WebGetAttribute 特性用于将服务操作标记为响应 HTTP GET 请求的操作。 这是将元数据添加到操作说明中的被动操作行为(IOperationBehavior 方法不执行任何操作)。 应用 WebGetAttribute 将无任何效果,除非将在操作说明中查找此元数据的行为(具体来说是 WebHttpBehavior)添加到服务的行为集合中。 WebGetAttribute 特性采用下表所示的可选参数。

参数 说明
BodyStyle 控制是否包装发送到应用该属性的服务操作以及从该操作接收的请求和响应。
RequestFormat 控制如何格式化请求消息。
ResponseFormat 控制如何格式化响应消息。
UriTemplate 指定 URI 模板,该模板控制将哪些 HTTP 请求映射到应用该属性的服务操作。

WebHttpBinding

WebHttpBinding 类使用 WebMessageEncodingBindingElement 集成了对 XML、JSON 和原始二进制数据的支持。 它由 HttpsTransportBindingElementHttpTransportBindingElementWebHttpSecurity 对象组成。 WebHttpBinding 专门与 WebHttpBehavior 结合使用。

WebInvokeAttribute

WebInvokeAttribute 属性类似于 WebGetAttribute,但它用于将服务操作标记为响应 HTTP 请求(GET 除外)的操作。 这是将元数据添加到操作说明中的被动操作行为(IOperationBehavior 方法不执行任何操作)。 应用 WebInvokeAttribute 将无任何效果,除非将在操作说明中查找此元数据的行为(具体来说是 WebHttpBehavior)添加到服务的行为集合中。

WebInvokeAttribute 特性采用下表所示的可选参数。

参数 说明
BodyStyle 控制是否包装发送到应用该属性的服务操作以及从该操作接收的请求和响应。
Method 指定将服务操作映射到的 HTTP 方法。
RequestFormat 控制如何格式化请求消息。
ResponseFormat 控制如何格式化响应消息。
UriTemplate 指定 URI 模板,该模板控制将哪些 GET 请求映射到应用该属性的服务操作。

UriTemplate

使用 UriTemplate 类,可以定义一组结构相似的 URI。 模板由两部分组成,即路径和查询。 路径由一系列由斜杠 (/) 分隔的段组成。 每个段都可以具有文本值、变量值(书写在大括号 [{ }] 内,且被限制为仅与一个段的内容匹配)或必须出现在路径末端的通配符(书写为星号 [*],与“路径的其余部分”匹配)。 查询表达式可以完全省略。 如果出现表达式,则它指定一组无序的名称/值对。 查询表达式的元素可以是文本对 (?x=2),也可以是变量对 (?x={value})。 不允许使用不成对的值。 UriTemplate 由 WCF WEB HTTP 编程模型在内部使用,用于将特定 URI 或 URI 组映射到服务操作。

UriTemplateTable

UriTemplateTable 类表示一组绑定到开发人员所选对象的关联 UriTemplate 对象。 您可以通过它将候选统一资源标识符 (URI) 与集合中的模板进行匹配,然后检索与匹配的模板相关联的数据。 UriTemplateTable 由 WCF WEB HTTP 编程模型在内部使用,用于将特定 URI 或 URI 组映射到服务操作。

WebServiceHost

WebServiceHost 扩展 ServiceHost,以便更方便地承载非 SOAP Web 样式服务。 如果 WebServiceHost 在服务说明中找不到终结点,则它将在服务的基址中自动创建一个默认终结点。 当创建默认 HTTP 终结点时,WebServiceHost 同时禁用 HTTP 帮助页和 Web 服务描述语言 (WSDL) GET 功能,以使元数据终结点不干扰默认 HTTP 终结点。 WebServiceHost 还将确保使用 WebHttpBinding 的所有终结点都附加了所需的 WebHttpBehavior。 最后,WebServiceHost 会自动配置终结点的绑定,以便在安全虚拟目录中使用时与关联的 Internet 信息服务 (IIS) 一起工作。

WebServiceHostFactory

当服务承载于 Internet 信息服务 (IIS) 或 Windows 进程激活服务 (WAS) 中时,WebServiceHostFactory 类用于动态创建 WebServiceHost。 与自承载服务(其中,主机应用程序对 WebServiceHost 进行实例化)不同,承载于 IIS 或 WAS 中的服务使用此类为服务创建 WebServiceHost。 当收到服务的传入请求时,将调用 CreateServiceHost(Type, Uri[]) 方法。

WebHttpBehavior

WebHttpBehavior 类提供服务模型层 Web 样式的服务支持所需的必要格式化程序、操作选择器等。 这会作为终结点行为(与 WebHttpBinding 结合使用)实现,并允许为每个终结点指定格式化程序和操作选择器,从而使得同一个服务实现同时公开 SOAP 和 POX 终结点。

扩展 WebHttpBehavior

可以使用如下多个虚方法来扩展 WebHttpBehaviorGetOperationSelector(ServiceEndpoint)GetReplyClientFormatter(OperationDescription, ServiceEndpoint)GetRequestClientFormatter(OperationDescription, ServiceEndpoint)GetReplyDispatchFormatter(OperationDescription, ServiceEndpoint) 以及 GetRequestDispatchFormatter(OperationDescription, ServiceEndpoint)。 开发人员可以从 WebHttpBehavior 派生类,并重写这些方法来自定义默认行为。

WebScriptEnablingBehavior 是扩展 WebHttpBehavior 的示例。 WebScriptEnablingBehavior 使 Windows Communication Foundation (WCF) 终结点可接收来自基于浏览器的 ASP.NET AJAX 客户端的 HTTP 请求。 使用 HTTP POST 的 AJAX 服务是使用此扩展点的示例。

警告

当使用 WebScriptEnablingBehavior 时,UriTemplateWebGetAttributeWebInvokeAttribute 特性中不受支持。

WebHttpDispatchOperationSelector

WebHttpDispatchOperationSelector 类使用 UriTemplateUriTemplateTable 类调度对服务操作的调用。

兼容性

WCF WEB HTTP 编程模型不使用基于 SOAP 的消息,因此不支持 WS-* 协议。 但是,您可以通过两个终结点公开同一协定:一个终结点使用 SOAP,另一个终结点不使用 SOAP。 请参阅如何:向 SOAP 和 Web 客户端公开协定的示例。

安全性

由于 WCF WEB HTTP 编程模型不支持 WS-* 协议,因此保证基于 WCF WEB HTTP 编程模型生成的 Web 服务安全的唯一方式是通过使用 SSL 公开服务。 有关使用 IIS 7.0 设置 SSL 的信息,请参阅如何在 IIS 中实现 SSL

另请参阅