1.2 WCF是对现有Windows平台下分布式通信技术的整合
建立一个完全基于SOA的通信框架是微软推出WCF的主要动机,而另一个促使微软不惜重金打造WCF的动机是将现有的所有分布式技术统一起来,提供一个统一的应用编程接口(API)。在过去若干年中,微软先后推出了一系列分布式通信技术,比较典型的包括COM/DCOM、Enterprise Service、.NET Remoting、XMLWeb服务、MSMQ等。
COM和DCOM
COM采用了基于组件的设计,通过组件对相关功能进行封装。COM遵循相应的规范,使组件之间能够进行相互通信。一个组件通过一个接口和一个唯一标识(GUID)对外提供功能,该接口和标识也是外界调用该组件的依据。COM的一个显著好处是使通过不同编程语言编写的组件能够通过IKnown或其他一些标准接口进行互操作。OLE和ActiveX完全采用基于COM的设计,而且微软的很多产品,比如Office、SQL Server都可以看到COM的身影。
COM最初仅仅提供了组件之间的本地调用,随着分布式应用的发展,对于远程组件调用的需求越来越多,于是出现了DCOM。DCOM(Distributed COM)即为了实现分布式远程调用而对COM进行的扩展,其本质还是COM。不过,在现有COM的基础上,DCOM对可靠传输、安全等提供了基本的支持。
.NET Remoting
.NET Remoting是微软推出的第一个基于.NET的分布式通信技术。.NET Remoting在一定程度上借鉴了DCOM的设计,并在很多方面对DCOM进行了加强,使其成为一个高性能和可扩展的分布式通行框架。WCF在很多方面都可以看到.NET Remoting的影子。比如相似的远程对象(服务实例)激活方式和远程对象(服务)寄宿(Hosting)方式等。
在通信层,.NET Remoting和WCF都提出了信道栈(Channel Stack)的概念,通过相应的信道(.NET Remoting中称为Channel Sink)对消息进行处理。和WCF一样,.NET Remoting的信道栈也是可扩展的,我们可以自定义信道,通过配置将其插入信道栈相应的位置。在我看来,.NET Remoting是WCF之前最为成熟的分布式通信框架。.NET Remoting不足之处在于不能实现对跨平台的支持。
在通信层,WCF和NET Remoting都采用基于信道栈的“管道式”消息处理与传递机制。信道栈是通过一系列相关信道进行有序组合构成的管道,其中的每一“节”信道独立地完成基于某种功能的消息处理。这是一种极具扩展性的设计,信道栈的组合性使我们能够根据具体的消息处理需求对构成管道的信道进行合理的组合。此外,我们甚至可以创建自定义信道实现一些现有信道无法实现的消息处理功能。
在我看来,.NET Remoting是WCF之前最为成熟的分布式通信框架。其最大的不足之处在于不能提供对跨平台的支持,仅仅提供服务端和客户端均处于.NET平台下的通信。
Web服务 + WSE
为了实现对跨平台的支持,微软在ASP.NET平台上开发出了Web服务。ASP.NET Web服务之所以能够提供跨平台的互操作性,在于它建立在一系列开放的标准之上,这些标准包括XML、XSD、SOAP和WSDL等。
为了支持WS-*,微软在ASP Web服务的基础上推出了WSE(Web Service Enhancement)。从名称不难看出,WSE是为了弥补ASP Web服务的不足而推出的,它在很多方面实现了对现有ASP Web服务功能的加强,使ASP Web服务正式成为一个适合企业级应用的通信框架。微软先后推出WSE 1.0、2.0和3.0,它们分别对不同的WS-*规范提供支持,比如WS-Securiry、WS-Routing、WS-Attachement、WS-Addressing、WS-Trust、WS-SecureConversation和WS-MTOM等。正因为WCF的出现,微软将不再推出新的WSE版本,从这一点不难看出WCF将会全面取代ASP.NET Web Service。
MSMQ
消息队列(Message Queuing,也称MSMQ),是微软对消息服务领域的开创性尝试。它采用了特殊的通信机制,对改善和提高系统的可扩展性(scalability)和高可用性(High Availability)具有重要的意义。MSMQ具有其他通信手段无法企及的优点,这些优点包括:
● 对异步的消息发送方式和离线通信方式的支持:消息队列下消息的发送永远是异步的,消息发送的失败不会对发送端的应用造成影响。消息队列支持离线的通信方式,如果由于网络或其他相关的问题导致目标队列暂时不可达,消息可暂存于本地的消息队列中,一旦检测到目标队列可达,则自动进行消息的发送。
● 消息的发送方和消息接收处理方完全分离:由于消息队列异步、离线的通信方式,可以将消息的发送方和消息接收方完全分离开来,使他们变成相互独立的应用。
● 可靠的消息传输:消息队列通过特殊的消息传输的机制,比如消息确认、超时处理、消息日志及死信队列等,充分保证了消息的可靠传输。
● 事务的支持:消息队列同时提供对本地事务和分布式事务的支持。通过分布式事务,完全可以把对消息队列的操作和一个基于SQL Server的操作纳入同一个事务之中。
WCF是Windows平台下各种分布式技术的集大成者
通过合理利用上面这些分布式技术完全可以创建一个完美的、能够适用不同层次需求的分布式应用。但是,这些单一的技术和产品专注于某一特定的领域,并且具有完全不同的应用编程接口(API),这使得开发人员很难从容地从其中一种转移到另一种上去。基于这样的原因,急需一种全新的通信框架来整合以上这些技术,这就是WCF需要完成的使命。WCF是Windows平台下各种分布式技术的集大成者,它将上述的这些通信技术完全整合在一起,提供了一套统一的API。图1-1体现WCF对Windows平台下现有分布式技术的整合。
图1-1 WCF对现有分布式技术的整合