Windows Communication Foundation





5.00/5 (1投票)
Windows Communication FoundationWindows Communication Foundation (WCF) 是一个用于在 Windows 上开发和部署服务的 SDK。WCF 提供了一个
Windows Communication Foundation
Windows Communication Foundation (WCF) 是一个用于在 Windows 上开发和部署服务的 SDK。WCF 为您的服务提供了一个运行时环境,使您能够将 CLR 类型公开为服务,并将其他服务作为 CLR 类型进行消耗。虽然理论上您可以不使用 WCF 构建服务,但在实践中,使用 WCF 构建服务会大大简化。WCF 是 Microsoft 对一组定义服务交互、类型转换、封送处理和各种协议管理的行业标准的实现。因此,WCF 提供了服务之间的互操作性。WCF 为开发人员提供了几乎任何应用程序所需的必备现成基础结构,从而大大提高了生产力。WCF 的第一个版本提供了许多有用的服务开发工具,例如托管、服务实例管理、异步调用、可靠性、事务管理、断开连接的队列调用和安全性。WCF 还拥有一个优雅的可扩展性模型,您可以使用它来丰富基本功能。事实上,WCF 本身就是使用这种可扩展性模型编写的。WCF 的大部分功能都包含在一个名为 System.ServiceModel.dll 的单一程序集中,位于 System.ServiceModel 命名空间下。
WCF 服务:
服务是公开给外界的功能单元。在这方面,它是从函数到对象到组件再到服务的漫长旅程的下一个进化步骤。面向服务 (SO) 是用于构建 SO 应用程序的一组抽象原则和最佳实践。如果您不熟悉面向服务的原则,面向服务的应用程序 (SOA) 将服务聚合到一个逻辑应用程序中,这类似于面向组件的应用程序聚合组件或面向对象的应用程序聚合对象。
服务可以是本地的或远程的,由多个方使用任何技术开发,独立版本化,甚至在不同的时间线上执行。在服务内部,您会发现语言、技术、平台、版本和框架等概念,而在服务之间,只允许采用规定好的通信模式。
服务的客户端仅仅是消耗其功能的一方。客户端可以是任何东西:一个 Windows 窗体类,一个 ASP.NET 页面,或者另一个服务。
客户端和服务通过发送和接收消息进行交互。消息可以直接从客户端传输到服务,也可以通过中介进行传输。在 WCF 中,所有消息都是 SOAP 消息。 请注意,消息独立于传输协议,与 Web 服务不同,WCF 服务可以通过多种传输方式进行通信,而不仅仅是 HTTP。WCF 客户端 可以与非 WCF 服务互操作,WCF 服务可以与非 WCF 客户端进行交互。也就是说,通常如果您同时开发客户端和服务,您可以构建应用程序,使得两端都需要 WCF 来利用 WCF 的特定优势。
服务可以是本地的或远程的,由多个方使用任何技术开发,独立版本化,甚至在不同的时间线上执行。在服务内部,您会发现语言、技术、平台、版本和框架等概念,而在服务之间,只允许采用规定好的通信模式。
服务的客户端仅仅是消耗其功能的一方。客户端可以是任何东西:一个 Windows 窗体类,一个 ASP.NET 页面,或者另一个服务。
客户端和服务通过发送和接收消息进行交互。消息可以直接从客户端传输到服务,也可以通过中介进行传输。在 WCF 中,所有消息都是 SOAP 消息。 请注意,消息独立于传输协议,与 Web 服务不同,WCF 服务可以通过多种传输方式进行通信,而不仅仅是 HTTP。WCF 客户端 可以与非 WCF 服务互操作,WCF 服务可以与非 WCF 客户端进行交互。也就是说,通常如果您同时开发客户端和服务,您可以构建应用程序,使得两端都需要 WCF 来利用 WCF 的特定优势。
由于服务的实现对外部是不可见的,因此 WCF 服务通常会公开元数据,描述可用的功能以及与服务通信的可能方式。元数据以预定义的、与技术无关的方式发布,例如使用 WSDL over HTTP-GET,或使用行业标准的元数据交换。非 WCF 客户端可以将元数据导入其本地环境作为本地类型。同样,WCF 客户端可以导入非 WCF 服务的元数据,并将其作为本地 CLR 类和接口进行消耗。
WCF 端点
每个服务都关联一个地址,该地址定义了服务的所在地;一个绑定,该绑定定义了如何与服务通信;以及一个契约,该契约定义了服务的功能。这个控制服务的“三位一体”很容易记住,就像服务的 **ABC** 一样。WCF 以端点的形式正式化了这种关系。端点是 **A**ddress(地址)、**B**inding(绑定)和 **C**ontract(契约)的融合。每个端点都必须同时具备这三个元素,并且由主机公开该端点。从逻辑上讲,端点就是服务的接口,类似于 CLR 或 COM 接口。
每个服务必须公开至少一个业务端点,每个端点只有一个契约。服务上的所有端点都具有唯一的地址,单个服务可以公开多个端点。这些端点可以使用相同或不同的绑定,并可以公开相同或不同的契约。服务提供的不同端点之间绝对没有关系。
需要指出的是,服务代码中的任何内容都与端点无关,端点始终是服务代码的外部。您可以通过配置文件以管理方式或以编程方式配置端点。
每个服务必须公开至少一个业务端点,每个端点只有一个契约。服务上的所有端点都具有唯一的地址,单个服务可以公开多个端点。这些端点可以使用相同或不同的绑定,并可以公开相同或不同的契约。服务提供的不同端点之间绝对没有关系。
需要指出的是,服务代码中的任何内容都与端点无关,端点始终是服务代码的外部。您可以通过配置文件以管理方式或以编程方式配置端点。
WCF 地址
在 WCF 中,每个服务都关联一个唯一的地址。地址提供两个重要元素:服务的位置以及用于与服务通信的传输协议或传输模式。地址的位置部分指示目标计算机、站点或网络的名称;一个通信端口、管道或队列;以及一个可选的特定路径或 URI。URI 是通用资源标识符,可以是任何唯一的字符串,例如服务名称或 GUID。
WCF 1.0 支持以下传输模式
- HTTP
- TCP
- 对等网络
- IPC(通过命名管道的进程间通信)
- MSMQ
与任何给定服务的通信有多个方面,并且存在许多可能的通信模式:消息可以是同步请求/回复或异步即发即弃;消息可以是双向的;消息可以立即传递或排队;队列可以是持久的或易失的。消息有许多可能的传输协议,例如 HTTP(或 HTTPS)、TCP、P2P(对等网络)、IPC(命名管道)或 MSMQ。有几种可能的消息编码选项:您可以选择纯文本以实现互操作性,选择二进制编码以优化性能,或者选择 MTOM(消息传输优化机制)来处理大型载荷。有几种消息安全性选项:您可以选择不加密,仅提供传输级安全,提供消息级隐私和安全,当然还有多种方式用于身份验证和授权客户端。消息传递可能不可靠,或者在跨越中介和断开连接时端到端可靠,消息可能按发送顺序处理,也可能按接收顺序处理。您的服务可能需要与其他只了解基本 Web 服务协议的服务或客户端进行互操作,或者它们可能能够使用 WS-* 现代协议集,如 WS-Security 和 WS-Atomic Transactions。您的服务可能需要通过原始 MSMQ 消息与旧版客户端进行互操作,或者您可能希望将服务限制为仅与其他 WCF 服务或客户端进行互操作。
如果开始计算所有可能的通信和交互选项,排列组合的数量可能高达数万种。其中一些选择可能是相互排斥的,有些可能需要其他选择。显然,为了正确通信,客户端和服务都必须在所有这些选项上达成一致。对于大多数应用程序而言,管理这种级别的复杂性不会增加业务价值,但做出错误决策的生产力和质量影响是严重的。
为了简化这些选择并使其更易于管理,WCF 将一组此类通信方面组合到绑定中。绑定仅仅是一组一致的、预设的选项,涉及传输协议、消息编码、通信模式、可靠性、安全、事务传播和互操作性。理想情况下,您会将所有这些“基础结构”方面从服务代码中提取出来,让服务能够专注于业务逻辑的实现。绑定使您能够对截然不同的基础结构使用相同的服务逻辑。
您可以按原样使用 WCF 提供的绑定,可以调整它们的属性,也可以从头开始编写自己的自定义绑定。服务在其元数据中发布其绑定的选择,使客户端能够查询绑定的类型和特定属性,因为客户端必须使用与服务完全相同的绑定值。单个服务可以在不同的地址上支持多个绑定。
WCF 定义了九种标准绑定
WCF 契约如果开始计算所有可能的通信和交互选项,排列组合的数量可能高达数万种。其中一些选择可能是相互排斥的,有些可能需要其他选择。显然,为了正确通信,客户端和服务都必须在所有这些选项上达成一致。对于大多数应用程序而言,管理这种级别的复杂性不会增加业务价值,但做出错误决策的生产力和质量影响是严重的。
为了简化这些选择并使其更易于管理,WCF 将一组此类通信方面组合到绑定中。绑定仅仅是一组一致的、预设的选项,涉及传输协议、消息编码、通信模式、可靠性、安全、事务传播和互操作性。理想情况下,您会将所有这些“基础结构”方面从服务代码中提取出来,让服务能够专注于业务逻辑的实现。绑定使您能够对截然不同的基础结构使用相同的服务逻辑。
您可以按原样使用 WCF 提供的绑定,可以调整它们的属性,也可以从头开始编写自己的自定义绑定。服务在其元数据中发布其绑定的选择,使客户端能够查询绑定的类型和特定属性,因为客户端必须使用与服务完全相同的绑定值。单个服务可以在不同的地址上支持多个绑定。
WCF 定义了九种标准绑定
- 基本绑定 由 BasicHttpBinding 类提供,旨在将 WCF 服务公开为旧版 ASMX Web 服务,以便旧客户端可以与新服务配合使用。当客户端使用此绑定时,它使新的 WCF 客户端能够与旧的 ASMX 服务配合使用。
- TCP 绑定 由 NetTcpBinding 类提供,它使用 TCP 在内网中进行跨机器通信。它支持多种功能,包括可靠性、事务和安全,并且针对 WCF 到 WCF 的通信进行了优化。因此,它要求客户端和服务都使用 WCF。
- 对等网络绑定 由 NetPeerTcpBinding 类提供,它使用对等网络作为传输。启用对等网络的客户端和服务都订阅同一个网格并向其广播消息。
- IPC 绑定 由 NetNamedPipeBinding 类提供,它使用命名管道作为传输进行同一台机器内的通信。它是最安全的绑定,因为它无法接受来自机器外部的调用,并且支持与 TCP 绑定类似的多种功能。
- Web 服务 (WS) 绑定 由 WSHttpBinding 类提供,它使用 HTTP 或 HTTPS 作为传输,并旨在提供多种功能,例如在 Internet 上进行可靠性、事务和安全通信。
- 联合 WS 绑定 由 WSFederationHttpBinding 类提供,它是 WS 绑定的一个特例,提供了对联合安全性的支持。
- 双工 WS 绑定 由 WSDualHttpBinding 类提供,它与 WS 绑定类似,但它还支持从服务到客户端的双向通信。
- MSMQ 集成绑定 由 MsmqIntegrationBinding 类提供,它将 WCF 消息转换为 MSMQ 消息,并从 MSMQ 消息转换而来,旨在与旧版 MSMQ 客户端进行互操作。
在 WCF 中,所有服务都公开契约。契约是描述服务功能的一种与平台无关的标准方式。WCF 定义了四种类型的契约。
WCF 托管- 故障契约 定义了服务引发的错误,以及服务如何处理和传播错误到其客户端。
WCF 服务类不能独立存在。每个 WCF 服务都必须托管在一个名为主机进程的 Windows 进程中。 一个主机进程可以托管多个服务,同一种服务类型也可以托管在多个主机进程中。WCF 不强制要求主机进程是否同时也是客户端进程。显然,拥有一个单独的进程有利于故障和安全隔离。主机由谁提供或涉及何种类型的进程也无关紧要。主机可以由 IIS、Windows Vista 上的 Windows 激活服务 (WAS) 或由开发人员作为应用程序的一部分提供。