WCF

一,概述

WCF(Windows Communication Foundation)是.net框架中用于构建数据通信和服务导向应用的一种应用编程接口。

Windows Communication Foundation (WCF) 是由微软发展的一组数据通信的应用程序开发接口,它是.NET框架的一部分,由 .NET Framework 3.0 开始引入,与 Windows Presentation Foundation 及 Windows Workflow Foundation 并行为新一代 Windows 操作系统以及 WinFX 的三个重大应用程序开发类库。

在 .NET Framework 2.0 以及前版本中,微软发展了 Web Service (SOAP with HTTP communication),.NET Remoting (TCP/HTTP/Pipeline communication) 以及基础的 Winsock 等通信支持,由于各个通信方法的设计方法不同,而且彼此之间也有相互的重叠性(例如 .NET Remoting 可以开发 SOAP, HTTP 通信),对于开发人员来说,不同的选择会有不同的程序设计模型,而且必须要重新学习,让开发人员在用户有许多不便。同时,服务导向架构 (Service-Oriented Architecture) 也开始盛行于软件工业中,因此微软重新查看了这些通信方法,并设计了一个统一的程序开发模型,对于数据通信提供了最基本最有弹性的支持,这就是 Windows Communication Foundation。

术语

1, Web Service:严格来说是行业标准,也就是Web Service 规范,也称作WS-*规范,既不是框架,也不是技术。它有一套完成的规范体系标准,而且在持续不断的更新完善中。

它使用XML扩展标记语言来表示数据(这个是夸语言和平台的关键)。微软的Web服务实现称为ASP.NET Web Service.它使用Soap简单对象访问协议来实现分布式环境里应用程序之间的数据交互。WSDL来实现服务接口相关的描述。此外Web services 可以注册到UDDI中心.供其客户查找使用。

后来微软做了ASP.NET Web Service的安全,性能,数据加密、解密,托管宿主等多方面的扩展,称为WSE系列,这个是过度产品,最高到WSE3.0.后来就是WCF时代。

2, ASP.NET Web Service:微软提供了Web服务的开发框架,属于ASP.NET Framework的一部分,但是支持早起的WS规范。比如SOAP1.1。

3, WCF:WCF 是一个分布式应用的开发框架,属于特定的技术,或者平台。既不是标准也不是规范。

WCF其实一定程度上就是ASP.NET Web Service,因为它支持Web Service的行业标准和核心协议,因此ASP.NET Web Service和WSE能做的事情,它几乎都能胜任,跨平台和语言更不是问题(数据也支持XML格式化,而且提供了自己的格式化器)。

但是WCF作为微软主推一个通讯组件或者平台,它的目标不仅仅是在支持和集成Web Service,因为它还兼容和具备了微软早期很多技术的特性。

WCF架构

WCF是根据服务导向架构原则来设计的,以支持用户端消费服务的分布式计算。客户端可以消费多个服务,服务也可被多客户消费。服务器松散地复制给每个客户。服务通常提供一个WSDL接口,以使任一WCF客户端可以跨平台消费该服务。 WCF implements many advanced web services (WS) standards such as WS-Addressing, WS-ReliableMessaging and WS-Security.

概念

WCF 由于集合了几乎由 .NET Framework 所提供的通信方法,因此学习曲线比较陡峭,开发人员必须要针对各个部份的内涵做深入的了解,才能够操控 WCF 来开发应用程序。

  • 通信双方的沟通方式,由合约来订定。

  • 通信双方所遵循的通信方法,由协议绑定来订定。

  • 通信期间的安全性,由双方约定的安全性层次来订定。

合约 (Contract)

WCF 的基本概念是以合约 (Contract) 来定义双方沟通的协议,合约必须要以接口的方式来体现,而实际的服务代码必须要由这些合约接口派生并实现。合约分成了四种:

  1. 数据合约 (Data Contract),订定双方沟通时的数据格式。

  2. 服务合约 (Service Contract),订定服务的定义。

  3. 营运合约 (Operation Contract),订定服务提供的方法。

  4. 消息合约 (Message Contract),订定在通信期间改写消息内容的规范。

一个 WCF 中的合约,就如同下列代码所示:

using System using System.ServiceModel namespace Microsoft.ServiceModel.Samples {[ServiceContract(Namespace = "http://Microsoft.ServiceModel.Samples")] // 服务合约public interfaceICalculator{[OperationContract] // 营运合约double Add(double n1, double n2)[OperationContract] // 营运合约double Subtract(double n1, double n2)[OperationContract] // 营运合约double Multiply(double n1, double n2)[OperationContract] // 营运合约double Divide(double n1, double n2)} }

协议绑定 (Binding)

由于 WCF 支持了 HTTP,TCP,Named Pipe,MSMQ,Peer-To-Peer TCP 等协议,而 HTTP 又分为基本 HTTP 支持 (BasicHttpBinding) 以及 WS-HTTP 支持 (WsHttpBinding),而 TCP 亦支持 NetTcpBinding,NetPeerTcpBinding 等通信方式,因此,双方必须要统一通信的协议,并且也要在编码以及格式上要有所一致。

一个设置通信协议绑定的示例如下:

<?xml version="1.0" encoding="utf-8" ?> <configuration<system.serviceModel<!-- 設定服務繫結的資訊 --><services<service name=" CalculatorService" <endpoint address="" binding="wsHttpBinding" bindingConfiguration="Binding1" contract="ICalculator" /></service</services<!-- 設定通訊協定繫結的資訊 --><bindings<wsHttpBinding<binding name="Binding1"</binding</wsHttpBinding</bindings</system.serviceModel </configuration

虽然 WCF 也可以使用 SOAP 做通信格式,但它和以往的 ASP.NET XML Web Services 不同,因此有部份技术文章中,会将 ASP.NET 的 XML Web Services 称为 ASMX Service。

WCF 的服务可以挂载于 Console Application,Windows Application,IIS (ASP.NET) Application,Windows Service 以及 Windows Activation Services 中,但大多都会挂在 Windows Service。

安全性层次

WCF 实现上已经支持了传输层次安全性 (Transport-level security) 以及消息层次安全性 (Message-level security) 两种。

  • 传输层次安全性:在数据传输时期加密,例如 SSL。

  • 消息层次安全性:在数据处理时就加密,例如使用数字签章,杂凑 或是使用金钥加密法等。

用户端

对于 WCF 的用户端来说,WCF 服务就像是一个 Web Service 一样,在 Visual Studio 2008 中,所有 WCF 服务的连接都是由用户端的 WCF Service Proxy 来运行,开发人员不用花费太多心思在通信上,而 WCF Service Proxy 在 Visual Studio 中被称为服务参考 (Service Reference)。

在 Visual Studio 中加入 WCF 的服务参考时,Visual Studio 会自动帮开发人员做掉一些必要工作(例如组态建立以及产生 Service Proxy 等),开发人员只需要在代码中取用 WCF Service Proxy 对象即可。

参见

WCF问答(1)WCF 与Web Service的区别| WCF分布式开发必备知识(4):Web Service| WCF分布式开发步步为赢(1):WCF分布式框架基础概念|

Wcf通讯基础框架方案(一)——基本结构|

WCF分布式开发步步为赢(2)自定义托管宿主WCF解决方案开发配置过程详解|

WCF身份验证之用户名密码认证|

WCF分布式开发步步为赢(0):WCF学习经验分享,如何更好地学习WCF?|

“轻松掌握WCF 帮你找到入门砖”访谈实录|