WCF初探-21:WCF终结点(endpoint)

WCF终结点概述

  • 在之前文章的示例中,我们都是通过配置服务的终结点(endpoint)发布的服务,供客户端调用,这是因为WCF服务的所有通信都是通过该服务的终结点进行的。每个终结点(endpoint)包含四个属性。
  1. 一个指示可以查找终结点的位置的地址。
  2. 一个指定客户端如何与终结点进行通信的绑定。
  3. 一个标识可用操作的协定。
  4. 一组指定终结点的本地实现细节的行为。

  

终结点的结构

  • 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 具有以下四个部分:
  1. 方案:http:
  2. 计算机:www. wangweimutou.com
  3. 端口(可选):8888
  4. 路径:/demoservice.svc/demoEndpoint

  

  • 作为 EPR 模型的一部分,每个终结点引用都可以包含一些添加额外标识信息的引用参数。在 WCF 中,将这些引用参数建模为 AddressHeader 类的实例。可以通过使用代码以强制方式或通过配置以声明方式指定服务的终结点地址。在代码中定义终结点通常不可行,因为已部署的服务的绑定和地址通常不同于开发服务时使用的绑定和地址。一般而言,使用配置定义服务终结点比使用代码更为可行。通过将绑定和寻址信息放置在代码之外,可以在更改这些信息之后不必重新编译和重新部署应用程序。
  • 在 WCF 中,有两种指定服务终结点地址的方式。可以为每个与服务关联的终结点指定一个绝对地址,也可以为服务的 ServiceHost 提供一个基址,然后再为每个与此服务关联的终结点指定一个地址(该地址是相对于此基址定义的)。可以在配置或代码中使用这两种过程来为服务指定终结点地址。如果不指定相对地址,则服务会使用基址。也可以为一个服务指定多个基址,但是对于每个传输协议,每个服务只允许有一个基址。如果有多个终结点,则会使用不同的绑定来配置每个终结点,它们的地址必须是唯一的。使用相同绑定但使用不同协定的终结点可以使用相同的地址。

终结点绑定

  • 绑定可指定在与终结点通话时所使用的通信机制,并指示如何连接到终结点。绑定包含三种类型的元素:
  1. 协议通道绑定元素,用于确定要用于发送到终结点的消息的安全性、可靠性、上下文流设置或用户定义的协议。
  2. 传输通道绑定元素,用于确定在向终结点发送消息时要使用的基础传输协议,例如 TCP 或 HTTP。
  3. 消息编码绑定元素,用于确定要对发送到终结点的消息使用的网络编码,例如,文本/XML、二进制或消息传输优化机制 (MTOM)。
  • 系统提供的绑定类型

  

  • 绑定功能列表

  

  • 绑定功能解释说明

  

  • 绑定方式选择建议

  

  

终结点协定

  • 服务协定指定终结点与外界通信的内容。更具体地说,它是有关一组特定消息的声明,这些消息被组织成基本消息交换模式 (MEP),如请求/答复、单向和双工。如果说服务协定是一组在逻辑上相关的消息交换,那么服务操作就是单个消息交换。服务协定是一个声明,它提供了有关以下方面的信息:
  1. 服务中操作的分组方式。
  2. 针对交换的消息所进行的各种操作的签名。
  3. 这些消息的数据类型。
  4. 操作的位置。
  5. 用于支持与服务成功通信的特定协议和序列化格式。
  • WCF服务是基于消息传输的,为了将这种信息传达到其他平台(包括非 Microsoft 平台)上的应用程序,XML 服务协定以标准 XML 格式公开表示,例如 Web 服务描述语言 (WSDL)和 XML 架构 (XSD)以及其他格式。许多平台的开发人员都可以使用此公共协定信息创建可以与该服务进行通信的应用程序,这是因为这些开发人员能够理解规范的语言,并且这些语言通过描述该服务支持的公共窗体、格式和协议支持互操作。
  • 协定可以用多种方式表示,尽管 WSDL 和 XSD 语言非常适合以可理解的方式描述服务,但这些语言很难直接使用 — 无论如何,这些语言只能描述服务,而不能描述服务协定实现。因此,WCF 应用程序使用托管属性、接口和类来定义服务的结构,并且实现服务。
  • 客户端或其他服务实施者(特别是在其他平台上)需要时,可以以元数据(WSDL 和 XSD)的形式转换(也称为“导出”)所得到的在托管类型中定义的协定。结果可以得到一个简单的编程模型,可以使用公共元数据向任何客户端应用程序描述该模型。
时间: 2024-08-25 06:18:58

WCF初探-21:WCF终结点(endpoint)的相关文章

[Solution] 一步一步WCF(2) 再解终结点Endpoint

繁忙的一天又一天,不管其他,先继续WCF吧. Endpoint包含地址,绑定,契约三要素.WCF作为一个Windows平台下最大的通信框架.通过终结点承载了所有通信功能.所以终结点的作用将非常重要. 本节,将介绍 SOA Address Bingding Contract Behavior SOA 面向服务架构(Service-Oriented Architecture)代表的是一种对关注点分离的思想,对于不同的人来说具有不同的意思. 而WebService.WCF以及其他平台的Web服务则是实

WCF初探-10:WCF客户端调用服务

创建WCF 服务客户端应用程序需要执行下列步骤: 获取服务终结点的服务协定.绑定以及地址信息 使用该信息创建 WCF 客户端 调用操作 关闭该 WCF 客户端对象 WCF客户端调用服务存在以下特点: 服务和客户端使用托管属性.接口和方法对协定进行建模. 若要连接客户端应用程序中的服务,则需要获取该服务协定的类型信息.通常,我们使用Svcutil.exe(ServiceModel Metadata Utility Tool)来完成,也可以直接在客户端项目上引用服务地址完成.它们会从服务中下载元数据

WCF初探-11:WCF客户端异步调用服务

前言: 在上一篇WCF初探-10:WCF客户端调用服务 中,我详细介绍了WCF客户端调用服务的方法,但是,这些操作都是同步进行的.有时我们需要长时间处理应用程序并得到返回结果,但又不想影响程序后面代码部分的执行,这时我们就需要考虑使用异步的方式来调用服务.注意这里的异步是完全针对客户端而言的,与WCF服务契约的方法是否异步无关,也就是在不改变操作契约的情况下,我们可以用同步或者异步的方式调用WCF服务. WCF客户端异步调用服务方式: 通过代理类异步调用服务.就需要通过使用事件驱动的异步调用模型

WCF初探-15:WCF操作协定

前言: 在前面的文章中,我们定义服务协定时,在它的操作方法上都会加上OperationContract特性,此特性属于OperationContractAttribute 类,将OperationContract应用于方法,以指示该方法实现作为服务协定(由 ServiceContractAttribute 属性指定)一部分的服务操作.OperationContractAttribute 属性声明方法是服务协定中的操作. 只有具有 OperationContractAttribute 属性的方法可

WCF初探-26:WCF中的会话

理解WCF中的会话机制 在WCF应用程序中,会话将一组消息相互关联,从而形成对话.会话”是在两个终结点之间发送的所有消息的一种相互关系.当某个服务协定指定它需要会话时,该协定会指定所有调用(即,支持调用的基础消息交换)必须是同一对话的一部分.如果某个协定指定它允许使用会话但不要求使用会话,则客户端可以进行连接,并选择建立会话或不建立会话.如果会话结束,然后在同一个通道上发送消息,将会引发异常. WCF中的会话机制通过设置服务协定(ServiceContract)上的SessionMode的枚举值

WCF初探-2:手动实现WCF程序

1.前言 上一篇,我们通过VS自带的模板引擎自动生成了一个wcf程序,接下来我们将手动实现一个wcf程序.由于应用程序开发中一般都会涉及到大量的增删改查业务,所以这个程序将简单演示如何在wcf中构建简单的增删改查服务.我们知道WCF是一组通讯服务框架,我将解决方案按大范围划分为服务端,客户端通过服务寄宿程序产生的代理来调用服务端的公开给客户端消费的方法.总个解决方案由五个项目工程: Service:定义服务契约接口和实现服务契约,此项目类型为类库项目 Common:通用层定义数据访问的帮助类,此

WCF初探-9:WCF服务承载 (下)

在WCF初探-8:WCF服务承载 (上)中,我们对宿主的概念.环境.特点做了文字性的介绍和概括,接下来我们将通过实例对这几种寄宿方式进行介绍.为了更好的说明各寄宿环境特点,本实例采用Http和net.tcp两种服务通讯方式,同时寄宿在不同的宿主中.程序结构如下: 服务契约的接口和实现代码如下: using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Ser

WCF初探-22:WCF中使用Message类(上)

前言 从我们学习WCF以来,就一直强调WCF是基于消息的通信机制.但是由于WCF给我们做了高级封装,以至于我们在使用WCF的时候很少了解到消息的内部机制.由于WCF的架构的可扩展性,针对一些特殊情况,WCF为我们提供了Message类来深度定制消息结构,以便我们拓展WCF的通信机制. 在之前的文章中,我们针对一些常用的WCF传递数据的方式进行了说明,比如数据协定和消息协定等.他们传递的数据最终都会转化为消息的实例.具体参照:        WCF初探-16:WCF数据协定之基础知识       

WCF初探-13:WCF客户端为双工服务创建回调对象

前言: 在WCF初探-5:WCF消息交换模式之双工通讯(Duplex)博文中,我讲解了双工通信服务的一个应用场景,即订阅和发布模式,这一篇,我将通过一个消息发送的例子讲解一下WCF客户端如何为双工服务创建回调对象. 双工服务指定一个回调协定,客户端应用程序必须实现该协定以便提供一个该服务能够根据协定要求调用的回调对象.虽然回调对象不是完整的服务(例如,您无法使用回调对象启动一个通道),但是为了实现和配置,这些回调对象可以被视为一种服务. 双工服务的客户端必须: 实现一个回调协定类. 创建回调协定