设计和实现服务

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

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

概述

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

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

  • 了解合同可能规定最低要求,而运行时配置或托管环境可能不支持这些要求。

服务协定

服务协定指定以下内容:

  • 协定公开的操作。

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

  • 这些消息的数据类型。

  • 操作的位置。

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

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

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

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

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

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

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

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

当客户端或其他服务实施者需要时,可以以元数据(WSDL 和 XSD)的形式导出在托管类型中定义的所得到的协定。 结果是一个简单的编程模型,可以描述(使用公共元数据)到任何客户端应用程序。 底层 SOAP 消息、传输和安全相关信息等的详细信息可以交由 WCF 处理,WCF 会自动完成服务合同类型系统与 XML 类型系统之间的必要转换。

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

面向消息

使用托管接口、类和方法对服务进行建模非常简单,当你习惯于远程过程调用(RPC)样式的方法签名时,在方法中传递参数并接收返回值是从对象或其他类型的代码中请求功能的正常形式。 例如,使用 Visual Basic 和 C++ COM 等托管语言的程序员可以将他们对 RPC 样式方法(无论是使用对象或接口)的知识应用到 WCF 服务协定的创建,而不会遇到 RPC 样式分布式对象系统中固有的问题。 服务方向提供了松散耦合、面向消息的编程的好处,同时保留了 RPC 编程体验的轻松和熟悉性。

许多程序员更熟悉面向消息的应用程序编程接口,例如消息队列(如Microsoft MSMQ、 System.Messaging .NET Framework 中的命名空间或在 HTTP 请求中发送非结构化 XML)等。 有关消息级别的编程的详细信息,请参阅 使用消息协定服务 Channel-Level 编程与 POX 应用程序的互作性

了解要求层次结构

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

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

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

另请参阅