Windows Communication Foundation (WCF) 是用于构建面向服务的应用程序的框架。借助 WCF,能够将数据做为异步消息从一个服务终结点发送至另外一个服务终结点。服务终结点能够是由 IIS 承载的持续可用的服务的一部分,也能够是应用程序中承载的服务。终结点能够是从服务终结点请求数据的服务客户端。简单消息能够是做为 XML 发送的单个字符或单个单词,复杂消息能够是二进制数据流。一些示例方案包括:编程
- 处理企业事务的安全服务。
- 将当前数据提供给其余服务(例如流量报告或其余监视服务)的服务。
- 使两我的可以实时通讯或交换数据的聊天服务。
- 轮询一个或多个服务以查找数据并将其以逻辑表现形式展现出来的面板应用程序。
- 将使用 Windows Workflow Foundation 实现的工做流做为 WCF 服务公开。
- 轮询服务以查找最新数据源的 Silverlight 应用程序。
虽然在 WCF 存在以前就能够建立此类应用程序,但 WCF 使终结点的开发比之前更容易。总之,WCF 设计提供一种用于建立 Web 服务和 Web 服务客户端的可管理的方式。安全
WCF 基础知识
WCF 是一个运行时和一组 API,用于建立在服务与客户端之间发送消息的系统。它使用相同的基础结构和 API 来建立应用程序,这些应用程序可与同一计算机系统上或驻留在另外一家公司内并经过 Internet 访问的系统上的其余应用程序进行通讯。服务器
消息和终结点
WCF 创建在基于消息的通讯这一律念基础之上,能够建模为消息(如 HTTP 请求或消息队列(也称为 MSMQ)消息)的任何内容均可以在编程模型中按照统一方式进行表示。这样,就能够在不一样传输机制间提供一个统一的 API。网络
该模型对“客户端”(即启动通讯的应用程序)和“服务”(即等待客户端与其进行通讯并响应该通讯的应用程序)加以区分。单个应用程序既能够充当客户端,也能够充当服务。有关示例,请参见双工服务和对等网络。架构
消息在终结点之间发送。终结点是发送或接收消息(或执行这两种操做)的场所,它们定义消息交换所须要的全部信息。服务公开一个或多个应用程序终结点(以及零个或更多个基础结构终结点),而客户端生成一个与服务的其中一个终结点兼容的终结点。框架
“终结点”以基于标准的方式描述消息应发送到的位置、消息应如何发送以及消息应具备的形式。服务能够将这些信息做为元数据加以公开,而客户端能够处理这些元数据以生成适当的 WCF 客户端和通讯堆栈。异步
通讯协议
通讯堆栈的一个必要元素是传输协议。可使用经常使用传输协议(如 HTTP 和 TCP)经过 Intranet 和 Internet 发送消息。也可使用其余支持与消息队列应用程序和对等网络网格上的节点进行通讯的传输协议。使用 WCF 的内置扩展点能够添加更多传输机制。编程语言
通讯堆栈中的另外一个必要元素是指定如何将任意给定消息格式化的编码。WCF 提供了下列编码:工具
- 文本编码,一种可互操做的编码。
- 消息传输优化机制 (MTOM) 编码,该编码是一种可互操做的方法,用于高效地将非结构化二进制数据发送到服务或从服务接收这些数据。
- 用于实现高效传输的二进制编码。
使用 WCF 的内置扩展点能够添加更多编码机制(如压缩编码)。性能
消息模式
WCF 支持多种消息模式,包括请求-回复、单向和双工通讯。不一样传输协议支持不一样的消息模式,于是会影响它们所支持的交互类型。WCF API 和运行库还能帮助您安全而可靠地发送消息。
WCF 术语
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 等)的简写。