协定
本节向您演示如何定义和实现 Windows Communication Foundation (WCF) 协定。服务协定指定终结点与外界通信的内容。更具体地说,它是有关一组特定消息的声明,这些消息被组织成基本消息交换模式 (MEP),如请求/答复、单向和双工。如果说服务协定是一组在逻辑上相关的消息交换,那么服务操作就是单个消息交换。例如,Hello 操作显然必须接受一条消息(以便调用方能够发出问候),并可能返回也可能不返回一条消息(具体取决于操作的礼节性)。
有关协定和其他核心 WCF 概念的更多信息,请参见Windows Communication Foundation 基础概念。本主题的重点是了解服务协定。有关如何生成能够使用服务协定与服务进行连接的客户端的更多信息,请参见 WCF 客户端概述。有关客户端通道、客户端体系结构和其他客户端问题的更多信息,请参见客户端。
概述
本主题对 WCF 服务的设计和实现提供了高级概念性介绍。各个子主题提供了有关具体设计和实现细节的更多详细信息。在设计和实现 WCF 应用程序之前,建议您:
了解什么是服务协定、服务协定的工作原理以及如何创建服务协定。
了解运行时配置或承载环境可能不支持的协定状态最低要求。
服务协定
服务协定是一个声明,它提供了有关以下方面的信息:
服务中操作的分组方式。
针对交换的消息所进行的各种操作的签名。
这些消息的数据类型。
操作的位置。
用于支持与服务成功通信的特定协议和序列化格式。
例如,采购订单协定可能具有一个 CreateOrder 操作,该操作接受订单信息类型输入并返回成功或失败信息,包括一个订单标识符。它还可能具有一个 GetOrderStatus 操作,该操作接受一个订单标识符并返回订单状态信息。此类服务协定需要指定:
采购订单协定由 CreateOrder 和 GetOrderStatus 操作组成。
这些操作指定了输入消息和输出消息。
这些消息可以携带的数据。
有关成功处理消息所必需的通信基础结构的分类声明。例如,这些详细信息包括建立成功通信是否需要安全以及需要哪些形式的安全。
为了将这种信息传达到其他平台(包括非 Microsoft 平台)上的应用程序,XML 服务协定以标准 XML 格式公开表示,例如 Web Services Description Language (WSDL)(Web 服务描述语言 (WSDL))和 XML Schema (XSD)(XML 架构 (XSD))以及其他格式。许多平台的开发人员都可以使用此公共协定信息创建可以与该服务进行通信的应用程序,这是因为这些开发人员能够理解规范的语言,并且这些语言通过描述该服务支持的公共窗体、格式和协议支持互操作。有关 WCF 如何处理这类信息的更多信息,请参见元数据。
然而,协定可以用多种方式表示,并且尽管 WSDL 和 XSD 语言非常适合以可理解的方式描述服务,但这些语言很难直接使用 — 无论如何,这些语言只能描述服务,而不能描述服务协定实现。因此,WCF 应用程序使用托管属性、接口和类来定义服务的结构,并且实现服务。
当客户端或其他服务实施者(特别是在其他平台上)需要时,可以以元数据(WSDL 和 XSD)的形式转换(也称为“导出”**)所得到的在托管类型中定义的协定。结果可以得到一个简单的编程模型,可以使用公共元数据向任何客户端应用程序描述该模型。基础 SOAP 消息的详细信息(例如与传输和安全相关的信息)可以留给 WCF 进行处理,它可以在服务协定类型系统和 XML 类型系统之间自动执行必要的转换。
有关设计协定的更多信息,请参见设计服务协定。有关实现协定的更多信息,请参见实现服务协定。
另外,WCF 还提供了完全在消息级开发服务协定的功能。有关在消息级开发服务协定的更多信息,请参见使用消息约定。有关以非 SOAP XML 格式开发服务的更多信息,请参见与 POX 应用程序的互操作性。
了解要求的层次结构
服务协定对操作进行分组;指定消息交换模式 (MEP)、消息类型和这些消息携带的数据类型;并指示某个实现为了支持协定而必须具有的运行时行为的类别(例如,它可能要求对消息进行加密和签名)。但是,服务协定本身并未明确指定如何满足这些要求,而只是指定这些要求必须得到满足。加密的类型或消息的签名方式取决于满足这些要求的服务的实现和配置。
请注意协定为添加行为而对服务协定实现和运行时配置提出特定要求的方式。为了公开某一服务以供使用而必须满足的这组要求建立于前一组要求之上。如果协定对实现提出要求,那么实现可能会对配置和绑定提出更多的要求,以便使服务能够运行。最后,主机应用程序还必须支持服务配置和绑定所添加的任何要求。
在设计、实现、配置和承载 Windows Communication Foundation (WCF) 服务应用程序时,牢记这一累积性要求过程是很重要的。例如,协定可能会指定需要支持某一会话。如果是这样,您必须配置绑定以支持该协定性要求,否则服务实现将无法正常工作。或者,如果服务要求进行集成 Windows 身份验证并以 Internet 信息服务 (IIS) 作为主机,则该服务所驻留的 Web 应用程序必须启用集成 Windows 身份验证并禁用匿名支持。有关不同服务主机应用程序类型的功能和影响的更多信息,请参见承载。