1.引言
最近在学习wcf,是在跟着徐长龙老师的讲的《跟我一起从零开始学WCF》课件进行学习的,由于发现学了几节后,由于各种原因,暂停学习了,很快就会忘记,决定跟着教程学习时,把它记录下来,以加深映像。
2.WCF概述
2.1 需求
一家汽车租赁公司决定创建一个新的应用程序,用于汽车预定,该租车预定应用程序的创建者知道,应用程序所实现的业务逻辑必须能够让公司内外运行的其他软件访问,其它软件如下:
- 运行在Windows 桌面上的呼叫中心客户端应用程序;
- 基于 J2EE 服务器构建;
- 在非 Windows 系统上运行的现有预定应用程序;
- 运行在各种平台上的合作伙伴应用程序,每个应用程序分别位于一个与该汽车租赁公司有业务合作的公司内,合作伙伴可能包括旅行社、航空公司,以及具有租车预定业务需求的其他组
2.2 需求分析
根据上面的需求,画出一个需求草图,如下
上图中分析出如下问题
- 呼叫中心客户端,是属于一个内网的系统,使用量是比较大,是.net的一个应用,这里提出了性能的问题。
- 内网的或者外网的其它平台,可能是.net应用软件,也有可能是非.net、非windows,这里就提出了互操作行(要兼容)、安全性(不能篡改)、事务性(分布式)的要求。
2.3 解决方案1
不使用WCF的方案,如下图
上图中提出了解决方案,现在罗列一下图中的 .NET Framework 技术:
- .NET Framework 远程处理,这种技术可用于与呼叫中心应用程序进行通信,因为二者都是建立在.NET Framework 之上的。远程处理专门为紧密耦合的 .NET 到 .NET 通信而设计,因此它为本地网络中的应用程序提供了无缝而直接的开发体验(性能)。
- ASP.NET Web 服务(ASMX),这种技术用于与基于 J2EE 的现有预定应用程序,以及与 Internet上的合作伙伴应用程序进行通信。 因为目前大多数平台都支持基本的Web 服务,所以在WCF 发布之前,这是实现跨供应商互操作性的最直接的方法(互操作性)。
- WSE,可与 ASMX 一起使用,以便与基于 J2EE 的预定应用程序以及合,作伙伴应用程序进行通信。它实现了最新定义的一些Web 服务,协议(统称WS-* 规范),因此只要相关所有应用程序都支持这些新规范的兼容版本,WSE 就可提供更加灵活的 Web 服务安全性(安全性)。
- 企业服务, 租车预定应用程序使用该技术来管理对象生存期和定义分布式事务。在与此应用场景中的任何其他应用程序通信和集成时,这些功能会很有用,但是企业服务仅支持有限的一组通信选项(事务性)。
- Microsoft 消息队列(MSMQ)。用于与基于 Windows 的合作伙伴应用程序进行通信,这些应用程序对数据传送、工作量分离以及应用程序生存期均要求有保证。消息队列提供持久稳定的消息传送,这通常是间歇式连接的应用(事务性)。
看到如此众多的技术,可想而知开发、维护是要花大力气,大代价,相当复杂繁琐。如果有其它方案,我想拍死方案1 。
2.4 解决方案2
方案1被否决了,接来来主角登场了,程序的最佳解决方案就是WCF,如下图
在图中只有一种技术WCF,不要怀疑,的确如此,WCF可用于前述所有情况,因此,租车预定应用程序使用这一种技术就可以实现其所有应用程序间的通信。
为什么WCF如此牛,如此适合呢,下面看看它是怎么牛的
- WCF 可使用Web 服务进行通信,因此与同样支持SOAP 的其他平台(例如基于J2EE 的主流应用程序服务器)间的互操作性就变得简单明了。
- 还可以对WCF 进行配置和扩展,以便与使用并非基于SOAP 的消息(例如像RSS 这种简单的XML 格式)的Web 服务进行通信。
- 性能是大多数业务中至关重要的考虑事项。开发 WCF 的目标就是要使之成为Microsoft 所开发的速度最快的分布式应用程序平台之一。
- 当通信双方都建立在WCF 上时,为获得最理想的性能,本例中使用的线上编码是 XML 信息集的一个优化的二进制版本。 消息仍遵循SOAP 消息的数据结构,但其编码使用该数据结构的二进制表示形式,而不是XML 1.0 文本编码的标准尖括号加文本格式。使用此选项的意义体现在与呼叫中心客户端应用程序的通信中,因为该应用程序也是建立在WCF 上,并且性能是一个重要的考虑事项。
- 管理对象生存期、定义分布式事务以及企业服务的其他方面的功能现在可以由WCF 来提供。任何基于WCF 的应用程序都可以使用这些功能,这意味着租车预定应用程序可以针对与之通信的任何其他应用程序使用这些功能。
- WCF 支持一个大的WS-* 规范集,因此可在与同样支持这些规范的任何其他平台进行通信时帮助提供可靠性、安全性和事务。
- 建立在消息队列上的WCF 排队消息选项使应用程序能够使用持久的排队,而无需使用另外一组应用程序编程接口。
WCF 好吧,我承认很牛,下面就总结出它的定义,什么是WCF。
WCF就是提供统一的,可用于建立安全、可靠的面向服务的应用的高效开发平台。将Web 服务的概念直接映射到.NET Framework 公共语言运行库(CLR) 中的对应内容,包括将消息灵活且可扩展地映射到用诸如Visual C# 或Visual Basic 等语言实现的服务。该服务模型提供支持松散耦合和版本管理的序列化功能,并提供与诸如消息队列(MSMQ)、COM+、ASP.NET Web 服务、Web 服务增强 (WSE) 等现有 .NET Framework 分布式系统技术以及很多其他功能的集成和互操作性。
3.WCF背景
微软是怎么开发出这么牛的技术,看一下web服务的发展历程
WCF是在WSE的后面才出现,当然WCF都是在前面版本的基础上慢慢完善的,下面看看几种分布式技术的比较
Xml Web Service |
.Net Remoting |
Enterprice Service |
WSE |
MSMQ |
WCF |
|
跨平台 |
√ |
√ |
||||
.Net与.Net通讯 |
√ |
√ |
||||
分布式事务 |
√ |
√ |
||||
安全可靠性 |
√ |
√ |
||||
消息队列 |
√ |
√ |
大家可能会想WCF技术这么牛,那WCF技术之前有个WSE,为什么要开发这个技术,这只是一种过渡技术,看一下给出的解释
为什么会有WSE?
- 基本的ASPNET 无法满足工业界对网络安全越来越多的需求
- WCF 又需要有较长的时间来完成,到06年底才正式发行
- WS-* 通信协议也需要有一个微软产品来支持
- WSE 就这样诞生了
4.小结
本节内容是从一个需求开始,通过需求分析、提出解决方案、筛选解决方案,把什么是WCF,WCF能干啥做了一个简单的描述。
作者:Qlin
出处:http://www.cnblogs.com/qqlin/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。