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)的形式转换(也称为“导出”)所得到的在托管类型中定义的协定。结果可以得到一个简单的编程模型,可以使用公共元数据向任何客户端应用程序描述该模型。

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

  1. WCF初探文章列表

    WCF初探-1:认识WCF WCF初探-6:WCF服务配置 WCF初探-2:手动实现WCF程序 WCF初探-7:WCF服务配置工具使用 WCF初探-3:WCF消息交换模式之单向模式 WCF初探-8:W ...

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

    繁忙的一天又一天,不管其他,先继续WCF吧. Endpoint包含地址,绑定,契约三要素.WCF作为一个Windows平台下最大的通信框架.通过终结点承载了所有通信功能.所以终结点的作用将非常重要. ...

  3. WCF初探-26:WCF中的会话

    理解WCF中的会话机制 在WCF应用程序中,会话将一组消息相互关联,从而形成对话.会话”是在两个终结点之间发送的所有消息的一种相互关系.当某个服务协定指定它需要会话时,该协定会指定所有调用(即,支持调 ...

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

    创建WCF 服务客户端应用程序需要执行下列步骤: 获取服务终结点的服务协定.绑定以及地址信息 使用该信息创建 WCF 客户端 调用操作 关闭该 WCF 客户端对象 WCF客户端调用服务存在以下特点: ...

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

    前言: 在上一篇WCF初探-10:WCF客户端调用服务 中,我详细介绍了WCF客户端调用服务的方法,但是,这些操作都是同步进行的.有时我们需要长时间处理应用程序并得到返回结果,但又不想影响程序后面代码 ...

  6. WCF初探-15:WCF操作协定

    前言: 在前面的文章中,我们定义服务协定时,在它的操作方法上都会加上OperationContract特性,此特性属于OperationContractAttribute 类,将OperationCo ...

  7. WCF初探-6:WCF服务配置

    WCF服务配置是WCF服务编程的主要部分.WCF作为分布式开发的基础框架,在定义服务以及定义消费服务的客户端时,都使用了配置文件的方法.虽然WCF也提供硬编程的方式,通过在代码中直接设置相关对象的属性 ...

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

    1.前言 上一篇,我们通过VS自带的模板引擎自动生成了一个wcf程序,接下来我们将手动实现一个wcf程序.由于应用程序开发中一般都会涉及到大量的增删改查业务,所以这个程序将简单演示如何在wcf中构建简 ...

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

    在WCF初探-8:WCF服务承载 (上)中,我们对宿主的概念.环境.特点做了文字性的介绍和概括,接下来我们将通过实例对这几种寄宿方式进行介绍.为了更好的说明各寄宿环境特点,本实例采用Http和net. ...

随机推荐

  1. zjuoj 3602 Count the Trees

    http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3602 Count the Trees Time Limit: 2 Seco ...

  2. 循环生成sql文件。

    package com; import java.io.File; import java.io.FileWriter; import java.io.IOException; import java ...

  3. Using MSBuild to publish a VS 2012 SSDT .sqlproj database project

    http://blog.danskingdom.com/using-msbuild-to-publish-a-vs-2012-ssdt-sqlproj-database-project-the-sam ...

  4. python核心编程学习记录之序列(字符串元组列表)

    可以在元组中放入可变类型如列表,然后修改列表来修改元组

  5. 让DIV水平和垂直居中的几种方法

    我们在设计页面的时候,经常要把DIV居中显示,而且是相对页面窗口水平和垂直方向居中显示,如让登录窗口居中显示.我们传统解决的办法是用纯CSS来让DIV居中.在本文中,我将给大家讲述如何用CSS和jQu ...

  6. yii2框架原生的结合框架使用的图片上传

    首先我们要从model层开始写起,主要是为了创建验证规则,还有图片上传的路径以及图片的命名规则(UploadForm.php) 接下来我们要在控制器层写好业务逻辑,就是什么情况下直接在调用model层 ...

  7. Sql Server2005新特性及性能

    举几个例子来简单说明 这些例子我引用了Northwind库. 1. TOP 表达式 SQL Server 2000的TOP是个固定值,是不是觉得不爽,现在改进了. --前n名的订单declare @n ...

  8. Hadoop学习笔记:MapReduce框架详解

    开始聊mapreduce,mapreduce是hadoop的计算框架,我学hadoop是从hive开始入手,再到hdfs,当我学习hdfs时候,就感觉到hdfs和mapreduce关系的紧密.这个可能 ...

  9. (3) 深入理解Java Class文件格式(二)

    好文转载:http://blog.csdn.net/zhangjg_blog/article/details/21487287 在上一篇文章 深入理解Java Class文件格式(一) 中, 介绍了c ...

  10. hadoop运维经验

    0.优化:http://dongxicheng.org/mapreduce/hadoop-optimization-0/ http://dongxicheng.org/mapreduce/hadoop ...