WCF分布式服务1-核心概念
Windows Communication Foundation (WCF) 是用于构建面向服务的应用程序的框架。 借助 WCF,可以将数据作为异步消息从一个服务终结点发送至另一个服务终结点。 服务终结点可以是由 IIS 承载的持续可用的服务的一部分,也可以是应用程序中承载的服务。 终结点可以是从服务终结点请求数据的服务客户端。 简单消息可以是作为 XML 发送的单个字符或单个单词,复杂消息可以是二进制数据流。
WCF 包括以下功能集。有关详细信息,请参见 WCF 功能详细信息.
服务导向
使用 WS 标准的一个结果是,WCF 允许您创建面向服务的应用程序。 面向服务的体系结构 (SOA) 依赖 Web 服务发送和接收数据。 这些服务具有松耦合的常规优点,而不是从一个应用程序到另一个应用程序进行硬编码。 松耦合关系意味着只要符合基本协定,则在任何平台上创建的任何客户端均可连接到所有服务。
互操作性
WCF 实现了 Web 服务互操作性的现代行业标准。有关以下内容的详细信息支持的标准,请参阅互操作性和集成。
多种消息模式
采用多种模式之一交换消息。 最常用的模式是请求/答复模式,其中一个终结点从另一个终结点请求数据, 另一个终结点进行答复。 还有其他模式,比如单向消息,其中只有一个终结点发送消息,而不期望得到答复。 更复杂的模式是双工交换模式,在该模式下,两个终结点建立连接并来回发送数据,类似于即时消息传递程序。有关以下内容的详细信息如何使用 WCF 实现不同的消息交换模式,请参阅协定。
服务元数据
WCF 支持使用行业标准(如 WSDL、XML 架构和 WS-Policy)中指定的格式发布服务元数据。 该元数据可用于自动生成并配置客户端,以便访问 WCF 服务。 可通过 HTTP 和 HTTPS 来发布元数据,也可使用 Web 服务元数据交换标准来发布元数据。有关详细信息,请参见 元数据.
数据协定
由于 WCF 是使用 .NET Framework 生成的,因此它也包括代码友好的方法,用于提供希望强制执行的协定。 数据协定就是其中一种通用类型的协定。 实质上,当您使用 Visual C# 或 Visual Basic 对服务进行编码时,处理数据的最简单方法是使用属于数据实体的属性创建表示该数据实体的类。WCF 包括一个以这种轻松的方式处理数据的综合系统。 在创建了表示数据的类之后,服务会自动生成使客户端能够符合所设计数据类型的元数据。有关详细信息,请参见 使用数据协定
安全性
可对消息进加密以保护隐私,而且可以要求用户对其自身进行身份验证,然后才允许接收消息。 可使用众所周知的标准(如 SSL 或 WS-SecureConversation)实现安全性。有关详细信息,请参见 Windows Communication Foundation 安全性.
多种传输和编码方式
可通过多种内置传输协议和编码中的任意一种发送消息。 最常用的协议和编码是使用超文本传输协议 (HTTP) 发送文本编码的 SOAP 消息,以便在万维网上使用。 此外,WCF 还允许通过 TCP、命名管道或 MSMQ 发送消息。 这些消息可以编码为文本,也可以使用优化的二进制格式。 使用 MTOM 标准可有效地发送二进制数据。 如果所提供的传输或编码都不符合您的需要,您可以创建自己的自定义传输或编码。有关以下内容的详细信息WCF 支持的传输和编码,请参阅 Windows Communication Foundation 中的传输。
可靠的排队消息
WCF 支持使用通过 WS-Reliable Messaging 实现的可靠会话和使用 MSMQ 进行可靠的消息交换。有关以下内容的详细信息WCF 中可靠和排队的消息支持,请参阅队列和可靠会话。
持久性消息
持久性消息决不会由于通信中断而丢失。 持久性消息模式的消息会始终保存到数据库中。 如果发生中断,数据库将允许您在恢复连接后恢复消息交换。 此外,也可以使用 Windows Workflow Foundation (WF) 来创建持久性消息。有关详细信息,请参见 工作流服务.
事务
WCF 还使用三个事务模型之一来支持事务:WS-AtomicTtransactions、System.Transactions 命名空间中的 API 以及 Microsoft 分布式事务协调器。有关以下内容的详细信息WCF 中的事务支持,请参阅WCF 中的事务。
AJAX 和 REST 支持
REST 是不断发展的 Web 2.0 技术的一个示例。WCF 可以配置为处理未包装在 SOAP 信封中的“纯文本”XML 数据。WCF 还可以扩展以支持特定的 XML 格式,如 ATOM(流行的 RSS 标准),甚至支持非 XML 格式(如 JavaScript 对象表示法 (JSON))。
扩展性
WCF 体系结构具有大量扩展点。 如果需要额外功能,它还提供许多入口点,允许您自定义服务的行为。有关以下内容的详细信息可用扩展点,请参阅扩展 WCF。
WCF 是一个运行时和一组 API,用于创建在服务与客户端之间发送消息的系统。它使用相同的基础结构和 API 来创建应用程序,这些应用程序可与同一计算机系统上或驻留在另一家公司内并通过 Internet 访问的系统上的其他应用程序进行通信。
WCF 建立在基于消息的通信这一概念基础之上,可以建模为消息(如 HTTP 请求或消息队列(也称为 MSMQ)消息)的任何内容都可以在编程模型中按照统一方式进行表示。这样,就可以在不同传输机制间提供一个统一的 API。
该模型对“客户端”(即启动通信的应用程序)和“服务”(即等待客户端与其进行通信并响应该通信的应用程序)加以区分。单个应用程序既可以充当客户端,也可以充当服务。有关示例,请参见双工服务和对等网络。
消息在终结点之间发送。终结点是发送或接收消息(或执行这两种操作)的场所,它们定义消息交换所需要的所有信息。服务公开一个或多个应用程序终结点(以及零个或更多个基础结构终结点),而客户端生成一个与服务的其中一个终结点兼容的终结点。
“终结点”以基于标准的方式描述消息应发送到的位置、消息应如何发送以及消息应具有的形式。服务可以将这些信息作为元数据加以公开,而客户端可以处理这些元数据以生成适当的 WCF 客户端和通信堆栈。
通信堆栈的一个必要元素是传输协议。可以使用常用传输协议(如 HTTP 和 TCP)通过 Intranet 和 Internet 发送消息。也可以使用其他支持与消息队列应用程序和对等网络网格上的节点进行通信的传输协议。使用 WCF 的内置扩展点可以添加更多传输机制。
通信堆栈中的另一个必要元素是指定如何将任意给定消息格式化的编码。 提供了下列编码:WCF提供以下类型:
文本编码,一种可互操作的编码。
消息传输优化机制 (MTOM) 编码,该编码是一种可互操作的方法,用于高效地将非结构化二进制数据发送到服务或从服务接收这些数据。
用于实现高效传输的二进制编码。
使用 WCF 的内置扩展点可以添加更多编码机制(如压缩编码)。
WCF 支持多种消息模式,包括请求-回复、单向和双工通信。不同传输协议支持不同的消息模式,因而会影响它们所支持的交互类型。WCF API 和运行库还能帮助您安全而可靠地发送消息。
WCF 文档中使用的其他概念和术语包括:
- 消息
-
消息是一个独立的数据单元,它可能由几个部分组成,包括消息正文和消息头。
- 服务
-
服务是一个构造,它公开一个或多个终结点,其中每个终结点都公开一个或多个服务操作。
- 终结点
-
终结点是用来发送或接收消息(或同时执行这两种操作)的构造。终结点包括一个定义消息可以发送到的目的地的位置(地址)、一个描述消息应如何发送的通信机制规范(绑定),以及对可以在该位置发送或接收(或同时执行这两种操作)的一组消息的定义(服务协定,用于描述可以发送哪些消息)。
WCF 服务作为一个终结点集合对外公开。
- 应用程序终结点
-
一个终结点,由应用程序公开并对应于该应用程序实现的服务协定。
- 基础结构终结点
-
一个终结点,由基础结构公开,以便实现与服务协定无关的服务需要或提供的功能。例如,服务可能拥有一个提供元数据信息的基础结构终结点。
- 地址
-
指定接收消息的位置。它以统一资源标识符 (URI) 的形式指定。URI 架构部分指定用于到达地址的传输机制,如 HTTP 和 TCP。URI 的层次结构部分包含一个唯一的位置,其格式取决于传输机制。
使用终结点地址可以为服务中的每个终结点创建唯一的终结点地址,或者在某些条件下在终结点之间共享一个地址。下面的示例演示了一个将 HTTPS 协议和一个非默认端口结合使用的地址:
HTTPS://cohowinery:8005/ServiceModelSamples/CalculatorService
- 绑定
-
绑定定义终结点与外界进行通信的方式。它由一组称为绑定元素的要素构造而成,这些元素“堆叠”在一起以形成通信基础结构。绑定最起码应定义传输协议(如 HTTP 或 TCP)和所使用的编码(如文本或二进制)。绑定可以包含指定详细信息(例如,用于保护消息的安全机制或终结点所使用的消息模式)的绑定元素。有关更多信息,请参见正在配置服务。
- 绑定元素
-
绑定元素表示绑定的特定部分,如传输协议、编码、基础结构级协议(如 WS-ReliableMessaging)的实现以及通信堆栈的其他任何要素。
- 行为
-
行为是控制服务、终结点、特定操作或客户端的各个运行时方面的要素。行为按照范围进行分组:常见行为在全局范围内影响所有终结点,服务行为仅影响与服务相关的方面,终结点行为仅影响与终结点相关的属性,操作级行为影响特定操作。例如,有一种服务行为是遏制,它指定当过多的消息可能超出服务的处理能力时,服务应该如何反应。另一方面,终结点行为仅控制与终结点相关的方面,如查找安全凭据的方式和位置。
- 系统提供的绑定
-
WCF 包含许多系统提供的绑定。这些绑定是针对特定方案进行优化的绑定元素的集合。例如,WSHttpBinding 是为了与实现各种 WS* 规范的服务进行互操作而专门设计的。通过仅提供那些可以正确应用于特定方案的选项,这些预定义的绑定可以节省时间。如果预定义的绑定不能满足您的要求,则可以创建您自己的自定义绑定。
- 配置与编码
-
可以通过代码编写、配置或将两者结合在一起对应用程序进行控制。配置的优点在于,它使非开发人员(如网络管理员)可以在代码编写完成后直接对客户端和服务参数进行设置,而不必重新进行编译。使用配置不仅可以设置值(如终结点地址),还可以通过添加终结点、绑定和行为来实施进一步的控制。通过代码编写,开发人员可以保持对服务或客户端的所有组件的严格控制,而且可以对通过配置完成的所有设置进行检查,并根据需要通过代码进行重写。
- 服务操作
-
服务操作是在服务的代码中定义的过程,用于实现某种操作的功能。此操作作为一个 WCF 客户端上的方法向客户端公开。该方法可以返回一个值,并可采用数量可选的参数,或是不采用任何参数且不返回任何响应。例如,一个实现简单的“Hello”的操作可以用作客户端存在通知,并可以开始一系列操作。
- 服务协定
-
服务协定将多个相关的操作联系在一起,组成单个功能单元。协定可以定义服务级设置,如服务的命名空间、对应的回调协定以及其他此类设置。在大多数情况下,协定的定义方法是用所选的编程语言创建一个接口,然后将 ServiceContractAttribute 属性应用于该接口。通过实现该接口,可生成实际的服务代码。
- 操作协定
-
操作协定定义参数并返回操作的类型。在创建定义服务协定的接口时,可以通过将 OperationContractAttribute 属性应用于协定中包含的每个方法定义来表示一个操作协定。可以将操作建模为采用单个消息作为参数并返回单个消息,或者建模为采用一组类型作为参数并返回一个类型。在后一种情况下,系统将确定需要为该操作交换的消息的格式。
- 消息协定
-
消息协定描述消息的格式。例如,它会声明消息元素应包含在消息头中还是包含在消息正文中,应该对消息的何种元素应用何种级别的安全性,等等。
- 错误协定
-
可以将错误协定与服务操作进行关联,以指示可能返回到调用方的错误。一个操作可以具有零个或更多个与其相关联的错误。这些错误是在编程模型中作为异常建模的 SOAP 错误。
- 数据协定
-
服务使用的数据类型必须在元数据中进行描述,以使其他各方可以与该服务进行交互操作。数据类型可以在消息的任何部分使用(例如,作为参数或返回类型)。如果服务仅使用简单类型,则无需显式使用数据协定。
- 宿主
-
服务必须承载于某个进程中。“宿主”是控制服务的生存期的应用程序。服务可以是自承载的,也可以由现有的宿主进程进行管理。
- 自承载服务
-
自承载服务是在开发人员创建的进程应用程序中运行的服务。开发人员控制服务的生存期、设置服务的属性、打开服务(这会将服务设置为侦听模式)以及关闭服务。
- 宿主进程
-
宿主进程是专为承载服务而设计的应用程序。这些宿主进程包括 Internet 信息服务 (IIS)、Windows 激活服务 (WAS) 和 Windows 服务。在这些宿主方案中,由宿主控制服务的生存期。例如,使用 IIS 可以设置包含服务程序集和配置文件的虚拟目录。在收到消息时,IIS 将启动服务并控制服务的生存期。
- 实例化
-
每个服务都具有一个实例化模型。有三种实例化模型:“单个”,在这种模型中,由单个 CLR 对象为所有客户端提供服务;“每个调用”,在这种模型中,将创建一个新的 CLR 对象来处理每个客户端调用;“每个会话”,在这种模型中,将创建一组 CLR 对象,并且为每个独立的会话使用一个对象。实例化模型的选择取决于应用程序要求和服务的预期使用模式。
- 客户端应用程序
-
客户端应用程序是与一个或多个终结点交换消息的程序。客户端应用程序通过创建一个 WCF 客户端实例并调用该 WCF 客户端的方法来开始工作。需要注意的是,单个应用程序既可以充当客户端,也可以充当服务。
- 通道
-
通道是绑定元素的具体实现。绑定表示配置,而通道是与该配置相关联的实现。因此,每个绑定元素都有一个相关联的通道。通道堆叠在一起以形成绑定的具体实现:通道堆栈。
- WCF 客户端
-
WCF 客户端是一个将服务操作作为方法公开的客户端应用程序构造(用您所选的 .NET Framework 编程语言编写,如 Visual Basic 或 Visual C#)。任何应用程序都可以承载 WCF 客户端,包括承载服务的应用程序。因此,可以创建一个包含其他服务的 WCF 客户端的服务。
通过使用 ServiceModel 元数据实用工具 (Svcutil.exe) 并使其指向正在运行的发布元数据的服务,可以自动生成 WCF 客户端。
- 元数据
-
服务的元数据描述服务的各种特征,外部实体需要了解这些特征以便与该服务进行通信。 ServiceModel 元数据实用工具 (Svcutil.exe) 可以使用元数据生成 WCF 客户端以及客户端应用程序可用来与服务进行交互的伴随配置。
服务所公开的元数据包括 XML 架构文档(用于定义服务的数据协定)和 WSDL 文档(用于描述服务的方法)。
启用元数据后,WCF 通过检查服务及其终结点自动生成服务的元数据。若要发布服务的元数据,必须显式启用元数据行为。
- 安全性
-
WCF 中的安全性包括保密性(为防止窃听而进行的消息加密)、完整性(用于检测消息篡改行为的方法)、身份验证(用于验证服务器和客户端的方法)以及授权(资源访问控制)。通过利用现有安全机制(如 TLS over HTTP,也称为 HTTPS)或通过实现各种 WS-* 安全规范中的一个或多个规范,可以提供这些功能。
- 传输安全模式
-
传输安全模式指定由传输层机制(如 HTTPS)提供保密性、完整性和身份验证。在使用像 HTTPS 这样的传输协议时,此模式的优点在于性能出色,而且由于它在 Internet 上非常流行,因此很容易理解。其缺点在于,这种安全分别应用于通信路径中的每个跃点,这使得通信容易遭受“中间人”攻击。
- 消息安全模式
-
消息安全模式指定通过实现一个或多个安全规范来保证安全,如名为“Web Services Security: SOAP Message Security”(Web 服务安全:SOAP 消息安全)的规范。每个消息都包含必要的安全机制,用于在消息传输过程中保证安全,并使接收方能够检测到篡改和对消息进行解密。从这种意义上说,安全信息包装在每个消息中,从而提供了跨多个跃点的端到端安全。由于安全信息成为消息的一部分,因此还可以在消息中包含多种凭据(这些凭据称为“声明”)。这种方法还具有这样一个优点,即消息可以通过任意传输协议(包括在其起点和目标之间的多个传输协议)安全地传送。这种方法的缺点在于所使用的加密机制较为复杂,使性能受到影响。
- 使用消息凭据的传输安全模式
-
此模式指定使用传输层来提供消息的保密性、身份验证和完整性,并且每个消息都可以包含消息接收方所要求的多个凭据(声明)。
- WS-*
-
一组不断增加的、在 WCF 中予以实现的 Web 服务 (WS) 规范(如 WS-Security、WS-ReliableMessaging 等)的简写。
-
双工等通信方式的入门Demo:
WCF分布式服务1-核心概念的更多相关文章
- 微软开源 WCF 分布式服务框架,并入 .NET 基金会项目
微软北京时间2015.5.20 在其 .NET Foundation GitHub 开源项目页中开放了 WCF 分布式服务框架的代码.WCF突然之间成为一个热门话题,在各大网站上都有不同的报道:dot ...
- Spring Cloud架构教程 (七)消息驱动的微服务(核心概念)【Dalston版】
下图是官方文档中对于Spring Cloud Stream应用模型的结构图.从中我们可以看到,Spring Cloud Stream构建的应用程序与消息中间件之间是通过绑定器Binder相关联的,绑定 ...
- WCF分布式服务2-服务配置部署
上图整理了服务配置过程中所用到的基本的元素,大致的步骤: 1. 主要是首先要在调用服务的程序集中添加服务的一个引用. 2. 然后添加一个service并指定服务的名称.终结点. 在添加一个servi ...
- WCF分布式开发步步为赢(3)WCF服务元数据交换、配置及编程开发
今天我们继续WCF分布式开发步步为赢(3)WCF服务元数据交换.配置及编程开发的学习.经过前面两节的学习,我们了解WCF分布式开发的相关的基本的概念和自定义宿主托管服务的完整的开发和配置过程.今天我们 ...
- Java分布式:分布式服务框架——ZooKeeper
Java分布式:ZooKeeper——核心概念 ZooKeeper 统一配置管理 统一命名服务 分布式锁
- 分布式服务框架选型:面对Dubbo,阿里巴巴为什么选择了HSF?
转载:http://www.sohu.com/a/141490021_268033 阿里巴巴集团内部使用的分布式服务框架 HSF(High Speed Framework,也有人戏称“好舒服”)已经被 ...
- WCF分布式开发步步为赢(5)服务契约与操作重载
继上一节WCF分布式开发步步为赢系列的(4):WCF服务可靠性传输配置与编程开发,本节我们继续学习WCF分布式开发步步为赢的第(5)节:服务契约与操作重载.这里我们首先讲解OOP面向对象的编程中方法重 ...
- WCF分布式开发步步为赢(9):WCF服务实例激活类型编程与开发
.Net Remoting的激活方式也有三种:SingleTon模式.SingleCall模式.客户端激活方式,WCF服务实例激活类型包括三种方式:单调服务(Call Service),会话服务(Se ...
- WCF分布式开发步步为赢(6):WCF服务契约继承与分解设计
上一节我们学习了WCF分布式开发步步为赢(5)服务契约与操作重载部分.今天我们来继续学习WCF服务契约继承和服务分解设计相关的知识点.WCF服务契约继承有何优势和缺点?实际项目里契约设计有什么原则和依 ...
随机推荐
- is 和 == 以及 编码和解码
1.is 比较的是内存地址 a="name" b="snow" print(a is b) # False id() 获取内存地址 a=" == ...
- samba服务器笔记 (一)
Samba安装 samba:主服务包:samba-client:客户端:samba-common:通用工具:samba4-libs:库:samba-winbind:windows域映射:samba-w ...
- Python 进程间数据交互
进程间通信:进程之间必须需要中间件. 不同进程间内存是不共享的,要想实现两个进程间的数据交换 Queues:实现传输两个进程的数据 线程queue,访问数据只能在一个进程内进行线程与线程之间的 ...
- [C++ Primer Plus] 第5章、循环和关系表达式(二)课后习题
1.编写一个要求用户输入两个整数的程序,将程序将计算并输出这两个整数之间(包括这两个整数)所有的整数的和.这里假设先输入较小的整数,例如如果用户输入的是2和9,则程序将指出2-9之间所有整数的和为44 ...
- 复旦大学2017--2018学年第一学期(17级)高等代数I期末考试第六大题解答
六.(本题10分) 设 $M_n(K)$ 为数域 $K$ 上的 $n$ 阶方阵全体构成的线性空间, $A,B\in M_n(K)$, $M_n(K)$ 上的线性变换 $\varphi$ 定义为 $\ ...
- BottomNavigationBar + BottomNavigationBarItem导航的另外一种用法
import 'package:flutter/material.dart'; import 'News.dart'; import 'Video.dart'; import 'Chat.dart'; ...
- P5205 【模板】多项式开根
思路 按如下式子计算即可 \[ B(x)=\frac{A(x)+B'^2(x)}{2B'(x)} \] 代码 // luogu-judger-enable-o2 #include <cstdio ...
- arXiv 提交 pre-print 文章的相关注意事项
arXiv 提交 pre-print 文章的相关注意事项 2018-11-25 22:38:28 1. 有一个可以正常上传 paper 的 arXiv 账号:https://arxiv.org/ 这 ...
- vue--显示和隐藏
一.v-if 判断通常是对用户行为的判断 用js来控制,则是使用if语句进行判断,而vue也提供了一个类似if语句的指令——v-if实现条件判断 首先在数据项里设置变量 data() { return ...
- Codeforces 788 C. The Great Mixing
题目链接:http://codeforces.com/contest/788/problem/C 一看就不能暴力$DP$,我们可以将浓度的合并操看作为在追逐一高度,每次操作前这个高度都会向上走$n$, ...