原文地址:http://blog.itpub.net/23109131/viewspace-661613/html
WCF是什么?web
WCF是"Windows Communication Foundation "的缩写,利用它可以开发出分布式(Distributed)应用程序,使用它能建立安全的(Secure)、可靠的(Reliable)、跨平台的(transacted messaging along with interoperability)的分布式解决方案。它能够支持跨应用程序域(AppDomain),进程(Process),网络(NetWork)的进行数据通信,并且能寄宿在诸如IIS,Windows Service,Console,Windows Application等多种宿主(Host)中。并且开发难度相比之前的.Net Remoting和Asp.Net Xml Web Service等都有了大幅度的下降。其最大的特征在于1)充分整合了原来的.Net Remoting,Asp.Net Xml,WebService,MSMQ,WSE,Enterprise Service等多项分布式技术,取其精华,弃其糟粕。2)WCF虽然整合了几项技术,但开发难度不增反降,简单易学。编程
WCF能干什么?windows
在win32中,应用程序是运行在进程(Process)的线程(Thread)中的,.Net平台出现以后,出现了AppDomain,其实就至关于在进程和线程之间又有了一层包装,相似于子进程的概念,在一个进程(或者应用程序域)中的对象能进行直接的访问和控制,但超出这个范围,便不能进行直接的访问和控制了,因此说进程(或者应用程序域)有必定的隔离做用,若是是分布在不一样网络,不一样操做系统上的不一样进程,他们进行通信的难度就更大,而分布式应用程序要求的就是将本来被隔离的做用域经过必定的契约联系起来,从而达成多个系统的沟通协做。固然能实现这种目的的方式远不止WCF一个,好比在win32时代,常用映射内存文件来实现进程之间的互操做问题,还有在windows程序中,用windows消息wm也能实现不一样进程之间的通信问题,但这些都有局限性,由于他们不能很好的解决跨平台,跨网络问题,而WCF能够。安全
WCF与其余分布式技术区别服务器
Xml Web Service网络 |
.Net Remoting数据结构 |
Enterprice Service框架 |
WSEtcp |
MSMQ |
WCF |
|
跨平台 |
√ |
√ |
||||
.Net与.Net通信 |
√ |
√ |
||||
分布式事务 |
√ |
√ |
||||
安全可靠性 |
√ |
√ |
||||
消息队列 |
√ |
√ |
WCF彷佛等于前面几项技术之和,它还具备本身的优势:1。统一性,2。互操做性,3。安全可靠,4。兼容性
WCF在安全性方面作的改进
为了保证数据通信的安全,WCF提供了三种保护措施:1)机密性(Confidentiality)2)完整性(Integrity) 3)可验证性(Authentication),这三种措施联合起来被称为CIA。而且这些措施在WCF中是默认支持的。机密性能保证传输的数据是通过加密的,不被非法监听(eavesdrop),而完整性利用数字签名技术防止数据在传输过程当中被注入(injected)或篡改(tampered),而验证(Authentication)能够采用灵活的策略来处理达到的客户端请求,好比用户名密码验证,客户端证书验证等。
为了跟踪Web Service和WCF的消息,咱们还须要了解一下两个工具:
原来一直用Trace Utilty来跟踪xml web service的消息报文,很是好用,它能按包显示出Soap信息,看起来也很是方便。有关它的消息,请从http://www.microsoft.com/downloads/details.aspx?FamilyId=C943C0DD-CEEC-4088-9753-86F052EC8450&displaylang=en 上下载SOAP Toolkit 3.0,安装后,便出现了这个工具,在跟踪xml web service的消息报文的时候,这个工具很好用,但跟踪wcf的报文却不行,能截获到数据,但每一个报文都是空的,可能也和wcf报文是通过加密的有关系吧,同时建议你们使用tcpTrace.
WCF在性能方面有那些改进?
分别测试循环1000次对wcf和xml web service相同功能方法的调用,获得以下的数据:
WCF | Web Service | |
第一次 | 9523ms | 7561ms |
第二次 | 9480ms | 7465ms |
第三次 | 9508ms | 7708ms |
第四次 | 9487ms | 7900ms |
通过四次测试数据,咱们能够得出,wcf的性能和xml web service相比的确要低,但差异不大,确定在一个数量级之上。
什么是契约?
任何一个分布式应用程序,它之因此可以互相传递消息,都是事先制定好数据交换规则的,这个规则正是交换数据的双方(好比服务器端和客户端)能彼此理解对方的依据,WCF做为分布式开发技术的一种,一样具备这样一种特性。而在WCF中制定的的规则就被称之为契约(Contract),它是WCF的消息标准,是任何一个wcf程序不可或缺的一部分。
在WCF中,契约分为四种,它们分别为:
如何定义契约?
其实上面落里罗嗦说了一大堆,彷佛契约使用起来应该很难的样子了,可事实上,契约的使用是很简单的,它无非就是在普通的程序结构上添加一些声明性的属性就能够了,好比咱们能够直接在类上声明ServerContractAttribute,此时这个类就能被远程客户端访问到,而在类中的方法中(Method)添加OperationContractAttribute就能将方法暴露给远程客户端,其余的契约也同样的用法,比较可贵仍是消息契约和错误契约,当也很简单。我这里没有WCF开发环境,因此具体怎么用,我就不作示例了,您仍不明白的话,能够参考下面几篇文章:
http://www.cnblogs.com/artech/archive/2007/02/28/659331.html
http://www.rainsts.net/article.asp?id=427
http://www.rainsts.net/article.asp?id=429
http://www.rainsts.net/article.asp?id=430
WCF做为一种可以跨平台的体系框架,独立于平台以外,它只约束通信的双方应该遵照什么样的规则,而丝绝不管双方各自采用的是什么样的技术和什么样的操做系统,也就是说若是有异构,异网的状况,根本不影响WCF。
Address是什么?
一个要和服务端通信的客户端要作的第一件事情,就是搞清数据要发给谁?目的地在哪?而Address正是经过一个Uri来惟一标示一个WCF的终节点(EndPoint)的,它标示了消息发送的目的地。在WCF 数据通信中,它解决了服务在哪里的问题。
Address的组成?
Address在WCF中的用System.ServiceModel.EndpointAddress对象来表示的,它的结构以下:
此外,Address还包括IsAnonymous属性,用于指示终节点是否能匿名访问。
如何在配置文件中指定Address?
在配置文件中,有两种方式能够指定Address,一种是绝对地址方式,另外是相对地址方式,分别以下:
绝对地址
相对地址
在网上有人说绝对地址是经过将httpGetEnabled设置为true,而且设置httpGetUrl为绝对地址是在设置endPoint的说法有些不许确,由于在WCF中有两种地址,一种是访问endPoint时候用到地址,另一种是服务描述的地址,服务描述在wcf中被称做serviceMetadata,经过它可以产生代理类,好比,咱们作以下的设置:
只表明在http://localhost:8731/Service/?wsdl上能找到服务描述,能够经过http://localhost:8731/Service/?wsdl生成代理类,而不是将endPoint的地址设置为了http://localhost:8731/Service,这点必定要注意,不要受有些说法的误导。
如何经过编程方式设置Address?
除了能在配置中设置Address外 ,还能够经过编程的方式来设置Address,具体方法请参参见下面的代码示例:
上面的代码就是将endPoint的地址设置为了http://127.0.0.1:2136/Service1
Address有什么特殊应用?
在wcf中,可以将服务同时发布到几个地址上面,只要这些地址采用的都是一种访问方式。这种一份程序,多个发布地址的作法,在以往的技术中是没有的。
WCF相关文章http://www.csharpwin.com/search.aspx?ChID=0&AID=0&KW=WCF