协定

本部分介绍如何定义和实施 Windows Communication Foundation (WCF)协定。 服务协定指定终结点与外部世界通信的内容。 更具体地说,它是有关一组特定消息的声明,这些消息被组织成基本消息交换模式 (MEP),如请求/答复、单向和双工。 如果服务协定是逻辑上相关的消息交换集,则服务作是单个消息交换。 例如,Hello 操作显然必须接收一条消息(以便调用方可以传达问候语),并且可能会或可能不会返回消息(具体取决于操作的设计)。

有关协定和其他核心 WCF 概念的详细信息,请参阅 基本 Windows Communication Foundation 概念。 本主题重点介绍了解服务协定。 有关如何生成使用服务协定连接到服务的客户端的详细信息,请参阅 WCF 客户端概述。 有关客户端通道、客户端体系结构和其他客户端问题的详细信息,请参阅 客户端

概述

本主题提供设计和实现 WCF 服务的高级概念方向。 子主题提供有关设计和实现的具体细节的详细信息。 在设计和实现 WCF 应用程序之前,建议您执行以下操作:

  • 了解服务协定是什么、工作原理以及如何创建服务协定。

  • 了解运行时配置或承载环境可能不支持的协定状态最低要求。

服务协定

服务协定是提供有关以下内容的语句:

  • 服务中操作的分组方式。

  • 针对交换的消息所进行的各种操作的签名。

  • 这些消息的数据类型。

  • 操作的位置。

  • 用于支持与服务成功通信的特定协议和序列化格式。

例如,采购订单合同可能具有一个 CreateOrder 操作,该操作接受订单信息类型的输入并返回成功或失败的信息,其中包括订单标识符。 它还可能具有接受 GetOrderStatus 订单标识符并返回订单状态信息的操作。 此类服务合同将规定:

  • 采购订单协定由 CreateOrderGetOrderStatus 操作组成。

  • 操作具有指定的输入消息和输出消息。

  • 这些消息可以携带的数据。

  • 有关成功处理消息所需的通信基础结构的分类语句。 例如,这些详细信息包括建立成功通信是否需要安全措施,以及需要哪种形式的安全措施。

为了将此类信息传达给其他平台上的应用程序(包括非Microsoft平台),XML 服务协定以标准 XML 格式公开表示,例如 Web 服务描述语言(WSDL)XML 架构(XSD),等等。 许多平台的开发人员可以使用此公共协定信息创建可以与服务通信的应用程序,因为它们了解规范的语言,并且这些语言旨在通过描述服务支持的公共表单、格式和协议来实现互作。 有关 WCF 如何处理此类信息的详细信息,请参阅 元数据

但是,协定可以以多种方式表示,虽然 WSDL 和 XSD 是一种易于访问的语言来描述服务,但它们是难以直接使用的语言-在任何情况下,它们只是服务的描述,而不是服务协定实现。 因此,WCF 应用程序使用托管属性、接口和类来定义服务的结构和实现服务。

托管类型中定义的结果协定可以在需要时转换(也称为导出)为元数据(WSDL 和 XSD),供客户端或其他服务实施者使用,尤其是在其他平台上。 结果是一个简单的编程模型,可以使用公共元数据对任何客户端应用程序进行描述。 基础 SOAP 消息的详细信息,例如运输和安全相关信息,可以交给 WCF 来处理。WCF 自动完成从服务协定类型系统到 XML 类型系统以及从 XML 类型系统到服务协定类型系统之间的必要双向转换。

有关设计协定的详细信息,请参阅 设计服务协定。 有关实现协定的详细信息,请参阅 “实现服务协定”。

此外,WCF 还提供完全在消息级别开发服务协定的功能。 有关在消息级别开发服务协定的详细信息,请参阅 “使用消息协定”。 有关在非 SOAP XML 中开发服务的详细信息,请参阅 与 POX 应用程序的互作性

了解要求层次结构

服务合同将操作进行分组,指定这些消息携带的消息交换模式 (MEP)、消息类型和数据类型,并指示实现必须具备的、支持合同的运行时行为类别(例如,它可能需要对消息进行加密和签名)。 但是,服务协定本身并不确切地指定满足这些要求的方式,只是必须满足这些要求。 哪种类型的加密或消息的签名方式由合规服务的实现和配置决定。

请注意,合同要求服务合同的实现和运行时配置符合某些条件,以便添加行为。 要满足一组要求才能使服务可用,而这些要求是在先前的一组要求之上建立的。 如果协定要求实现,则实现可能需要更多配置和绑定,使服务能够运行。 最后,主机应用程序还必须支持服务配置和绑定添加的任何要求。

在设计、实现、配置和托管 Windows Communication Foundation (WCF) 服务应用程序时,必须牢记这一附加要求过程。 例如,协定可能会指定需要支持某一会话。 如果是这样,则必须配置绑定以支持该合同要求,否则服务实现将不起作用。 或者,如果你的服务需要集成 Windows 身份验证,并且托管在 Internet Information Services (IIS)中,则服务所在的 Web 应用程序必须打开集成 Windows 身份验证并关闭匿名支持。 有关不同服务主机应用程序类型的功能和影响的详细信息,请参阅 “托管”。

另请参阅