WCF终结点概述
- 在之前文章的示例中,我们都是通过配置服务的终结点(endpoint)发布的服务,供客户端调用,这是因为WCF服务的所有通信都是通过该服务的终结点进行的。每个终结点(endpoint)包含四个属性。
- 一个指示可以查找终结点的位置的地址。
- 一个指定客户端如何与终结点进行通信的绑定。
- 一个标识可用操作的协定。
- 一组指定终结点的本地实现细节的行为。
终结点的结构
- WCF服务终结点(endpoint)通信结构
- 终结点(endpoint)的组成内容
终结点地址
- 每个终结点都具有与其关联的地址,该地址用于查找和标识终结点。此地址主要包括指定终结点位置的统一资源标识符 (URI)。终结点地址在WCF编程模型中由 EndpointAddress 类表示,该类包含一个可选的 Identity 属性(允许由与一个终结点交换消息的其他终结点对该终结点进行身份验证)和一组可选的 Headers 属性(定义到达服务所需的任何其他 SOAP 头)。可选头提供其他的更详细寻址信息以标识服务终结点或与之交互。终结点的地址在网络上表示为 WS-Addressing 终结点引用 (EPR)。在 WCF 中,EndpointAddress 按照 WS-Addressing 标准中的定义建立终结点引用 (EPR) 的模型。大多数传输的地址 URI 包含以下四个部分。例如,“http://www.wangweimutou.com:8888/demoservice.svc/demoEndpoint”这个 URI 具有以下四个部分:
- 方案:http:
- 计算机:www. wangweimutou.com
- 端口(可选):8888
- 路径:/demoservice.svc/demoEndpoint
- 作为 EPR 模型的一部分,每个终结点引用都可以包含一些添加额外标识信息的引用参数。在 WCF 中,将这些引用参数建模为 AddressHeader 类的实例。可以通过使用代码以强制方式或通过配置以声明方式指定服务的终结点地址。在代码中定义终结点通常不可行,因为已部署的服务的绑定和地址通常不同于开发服务时使用的绑定和地址。一般而言,使用配置定义服务终结点比使用代码更为可行。通过将绑定和寻址信息放置在代码之外,可以在更改这些信息之后不必重新编译和重新部署应用程序。
- 在 WCF 中,有两种指定服务终结点地址的方式。可以为每个与服务关联的终结点指定一个绝对地址,也可以为服务的 ServiceHost 提供一个基址,然后再为每个与此服务关联的终结点指定一个地址(该地址是相对于此基址定义的)。可以在配置或代码中使用这两种过程来为服务指定终结点地址。如果不指定相对地址,则服务会使用基址。也可以为一个服务指定多个基址,但是对于每个传输协议,每个服务只允许有一个基址。如果有多个终结点,则会使用不同的绑定来配置每个终结点,它们的地址必须是唯一的。使用相同绑定但使用不同协定的终结点可以使用相同的地址。
终结点绑定
- 绑定可指定在与终结点通话时所使用的通信机制,并指示如何连接到终结点。绑定包含三种类型的元素:
- 协议通道绑定元素,用于确定要用于发送到终结点的消息的安全性、可靠性、上下文流设置或用户定义的协议。
- 传输通道绑定元素,用于确定在向终结点发送消息时要使用的基础传输协议,例如 TCP 或 HTTP。
- 消息编码绑定元素,用于确定要对发送到终结点的消息使用的网络编码,例如,文本/XML、二进制或消息传输优化机制 (MTOM)。
- 系统提供的绑定类型
- 绑定功能列表
- 绑定功能解释说明
- 绑定方式选择建议
终结点协定
- 服务协定指定终结点与外界通信的内容。更具体地说,它是有关一组特定消息的声明,这些消息被组织成基本消息交换模式 (MEP),如请求/答复、单向和双工。如果说服务协定是一组在逻辑上相关的消息交换,那么服务操作就是单个消息交换。服务协定是一个声明,它提供了有关以下方面的信息:
- 服务中操作的分组方式。
- 针对交换的消息所进行的各种操作的签名。
- 这些消息的数据类型。
- 操作的位置。
- 用于支持与服务成功通信的特定协议和序列化格式。
- WCF服务是基于消息传输的,为了将这种信息传达到其他平台(包括非 Microsoft 平台)上的应用程序,XML 服务协定以标准 XML 格式公开表示,例如 Web 服务描述语言 (WSDL)和 XML 架构 (XSD)以及其他格式。许多平台的开发人员都可以使用此公共协定信息创建可以与该服务进行通信的应用程序,这是因为这些开发人员能够理解规范的语言,并且这些语言通过描述该服务支持的公共窗体、格式和协议支持互操作。
- 协定可以用多种方式表示,尽管 WSDL 和 XSD 语言非常适合以可理解的方式描述服务,但这些语言很难直接使用 — 无论如何,这些语言只能描述服务,而不能描述服务协定实现。因此,WCF 应用程序使用托管属性、接口和类来定义服务的结构,并且实现服务。
- 客户端或其他服务实施者(特别是在其他平台上)需要时,可以以元数据(WSDL 和 XSD)的形式转换(也称为“导出”)所得到的在托管类型中定义的协定。结果可以得到一个简单的编程模型,可以使用公共元数据向任何客户端应用程序描述该模型。
时间: 2024-11-10 22:44:27