WCFwindows communication fundation 对于这个名词也许你很陌生,也许你很熟悉,但是我想告诉你它一直在我们身边。
还记得我们敲机房系统的时候创建项目吗?还记的学习设计模式的时候创建的项目吗?甚至说为某项功能敲的小Dome那你有没有发现WCF呢,也许你发现了,也许你没有发现,而我就是未发现者。看看下面这张图片,你能不能找到它?
相信聪明的你这次很容易的就在这个窗口中发现了WCF的踪影。
我一直在想一个问题,它就在那里我却不自知。记得师哥面试的时候,面试官曾经问过他,关于WCF的知识,那个时候哪里知道WCF听都没有听说过。其实它就在我们的身边,只是我们缺乏发现美的眼睛而已。
今天呢,颖杰就将WCF这项技术介绍给大家,说技术也许说框架更合理一些。
一 什么是WCF?
WCF是基于windows平台下开发和部署服务的软件开发包。它为服务提供了运行时的环境。它是.net framework 的一个重要组成部分。它集成了.net remoting、web 服务、wse以及MSMQ的所有的特性使开发者能够以统一的方式开发面向服务的应用程序。它微软准对企业级的应用的重要产品。WCF的最终目标是通过进程或不同的系统、通过本地网络或是通过Internet收发客户和服务之间的消息。它使得开发者能够建立一个跨平台、可信赖、事务性的解决方案。且能与已有系统兼容协作。
看了上面的解释也许你要点乱乱的,什么remoting 、什么MSMQ,这些也许你都没有听说过, 没关系今天这篇文章将介绍WCF,后面的文章我们将陆续介绍他们之间的不同。
相信大家都有网上购物的经历,打开淘宝、京东、天猫,选择自己需要的object。鞋子要37码的,衣服要均码的,白色的等等。只要点击了付款,交钱之后只要等着快递叔叔的电话或短信就可以了。这个时候其实就是我们享受了网上购物的服务。它让我们足不出户,体味世间万物。我想说其实WCF就是为服务提供了运行时的环境,就像现在的网上购物的环境一样。客户端只要配置,就可以享受服务。
二 托管
WCF服务类不能凭空存在,每个WCF服务类都必须托管在windows进程中,该进程被称为宿主进程。宿主可以有IIS提供,也可以由Windows Vista的Windows激活服务(WAS)提供,或者开发者直接将它作为应用程序一部分,说白了就是WCF服务交给谁管理。交给IIS,还是WAS,或者是自己管理。就如同现在你是卖家,你想在网上开一家小店,你是在淘宝注册呢?还是在京东,或是在窝窝团?当然了不同的购物网站有各自不同的特点,你根据自己的实际情况选择需要注册的网站,WCF服务也是这样。
下面介绍一下WCF的各种不同的托管。
1 IIS托管
主要优势是宿主进程可以在客户端提交第一次请求的时候自动启动,在IIS环境中运行的WCF服务充分利用了IIS功能,例如进程回收、空间关闭、进程运行状况监视和基于消息的激活。此宿主选项要求正确配置IIS,但不需要编写任何承载代码作为应用程序的一部分。
具体的实践代码参见:《无废话WCF入门教程》
2 WAS托管
它是windows激活服务,是一个系统服务,是IIS 7 的一部分。也可以独立的安装与配置,它与IIS 6的区别在于was不只局限于http协议,它支持wcf可以的所有协议、端口和队列,比如http、TCP、MSMQ、IPC协议。was提供了大量基于自托管的功能,包括:应用程序池、回收机制、空闲时间管理、身份管理以及隔离。宿主进程可以根据情况选择使用这些进程。
特别指出:WAS是IIS 7 的一部分,它是IIS的新增功能,IIS 6 是不具备的,也正是因为IIS 7 有了它,才使得以前的iis(iis 6)只能支持HTTP协议,发展为同时支持非http的协议。
3 自托管
自托管就是开发者提供和管理宿主进程的生命周期。它适用于以下场景:需要确定客户端与服务端的进程边界时;服务与客户端处理相同的进程中时。自托管进程可以是控制台应用程序、windows应用程序、windows服务等,进程必须在客户端服务之前运行。它支持的协议与WAS托管相同。
三 绑定
服务之间的通信方式是多种多样的,有多种可能的通信模式。包括:同步请求/应答消息、双向消息、即时消息、持久队列。消息的传递协议也有很多种:http、tcp、P2P、IPC、MSMQ。消息的编码格式包括:保证互操作性的纯文本编码格式、优化性能的二进制编码格式、提供有效负载的MTOM编码格式。对于消息的安全保障也有多种 策略。对于服务之间的通信还需要一些其他的很多纷繁复杂的属性需要设置。
为了简化操作,易于管理,WCF引入了绑定技术将这些通信特征组合在一起。一个绑定封装了诸如传输协议、消息编码、通信模式、可靠性、安全性、事务传播以及互操作性能等相关选项的集合。理想状态下,我们希望从设置繁杂服务代码中解放出来,而把主要工作集中在业务逻辑的实现方面。
WCF为我们提供了各种绑定,当然我们也可以自行调整绑定的属性,也可以不采用提供的绑定,自己定制。WCF为我们提供了9中标准绑定:基本、TCP、对等网、IPC、web服务、WS联邦绑定、WS双向绑定、MSMQ绑定、MSMQ集中绑定。关于具体的这些绑定呢,以后的文章将具体介绍。
WCF中为什么要有绑定呢?
个人觉得它是为了在客户端与服务端进行消息的传递。就像我们从一个地方到另一个目的地。我们有多种可选择的交通工具。根据我们自己的需要,选择适合自己的交通工具。WCF的绑定其实就是为通信选择设置交通工具。
四 契约
WCF的所有服务都会公开为契约。契约与平台无关,是描述服务功能的标准方式。WCF定义了四种类型的契约:服务、数据、错误、消息契约。服务契约描述了客户端能够执行的服务操作。数据契约地应了服务交互的数据类型。错误契约定义饿了服务抛出的错误,以及服务处理错误和传递错误到客户端的方式。消息契约允许服务直接与消息交互。消息契约可以是类型化,也可以是非类型化的。
总结:
WCF的出现是微软专门为分布式而开发的,虽然说以前也有很多的技术可以实现,但是相对比较麻烦。WCF综合以往的各项技术,取其精华,去其糟粕。
PS: 看到一句话觉得很有霸气,和大家分享:
以WCF为基础框架搭建面向服务的企业级应用程序,以WF工作流引擎支撑企业应用中业务流程的传递与控制,以Cardspace和WCF固有的安全策略保证企业信息的安全,最后以asp.net
AJAX、wpf和silverlight技术丰富界面的绚丽表现,从而改善企业客户对应用程序的体验,这就是微软实现企业级用用的霸业宏图。WCF在其中的地位举足轻重。
微软在用它的技术有条不紊的实现着它即定的宏伟蓝图,而我却对上面的很多技术都不熟悉,可见消息之闭塞,我在想:那通过什么途径才能让我们了解更多的现在技术的发展趋势呢,也许看博客、实时关注行业最新动态是最快最有效的途径吧。
这些都是自己对WCF暂时见解,欢迎各位指正。