WCF学习笔记

 1.  WCF简介

2.  一个例子--为什么需要WCF

3. WCF能提供什么

4. 总结.net remoting WS 和WCF区别

5. 一个Demo

6. References

WCF简介

        WCF是一个面向服务的用来在不同应用间进行通信的统一的松耦合编程框架,它是现有Windows平台下分布式通信技术(.net Remoting, Web Services等)的一种整合。说简单了WCF就是提供了一个统一的编程架构或者说模式解决不同应用间(Web应用,.net应用,其他平台下应用)通信问题。

        以下这段文字摘自于Artech的博客,他概括的说明了WCF的作用和技术侧重点:WCF中各个子系统之间是通过XML Message进行交互的,所以我们可以把WCF看成是一个完全处理XML Message的构架,WCF的所有的功能都是围绕着Message来展开的——如何把一个Service的调用转或称一个Message Exchange(Service Contract);如何实现一般的.NET对象和能够容纳于XML Message中的XML Infoset之间的转化(Serialization和Deserialization);如何实现承载数据的XML Infoset和能够用于网络传递的字节流(Byte Stream)之间的相互转化(Encoding和Deconding);如何保证置于Message中数据的一致性和防止被恶意用户窃取以及验证调用Service和通过Service的合法性(Security:Confidentiality,Integrity,Authentication——CIA);如何保证Message被可靠地被传达到所需的地方(Reliable Messaging);以及如何把若干次Service调用——本质上是若干次Message Exchange纳入到一个单独的Conversation(Session Support 和Transaction Support……   

一个例子--为什么需要WCF

         考虑以上一个自动化测试执行框架的分布式应用:ATEF server端提供对ATEF client的控制服务并且存储自动化执行的cases,该server运行于Windows平台下,每当有ATEF Client客户端机器加进来都会将机器信息写入Server,而ATEF Studio可以创建自动化执行cases,并检索到整个框架内有多少机器,可以通过ATEF Server交互给每个机器分配不同的自动化执行任务,该框架的扩展要求对于原有运行于Java EE 上以及其他平台上的应用进行交互。实现这个框架还是有很大的难度:对于同等运行于Windows平台技术下的Studio来说,性能是最重要的,而交互并不存在太大问题;但对于Java EE的应用交互就成了最大的问题,同时由于是分布式应用,安全性和事务处理也是必须要考虑的。

         传统的技术实现方法:

         ASMX(ASP.net Web Services)可用于通过互联网与Java EE的应用进行通信。

         .Net Remoting 可用于同样基于Windows平台下技术的Client Studio等应用的通信,因为.Net Remoting本来就是为了.Net-to-.Net通信设计的。

         .Net Enterprise Services可用于ATEF server端的对象生命周期管理和定义分布式事务。这些函数对于与其他任何应用交互非常有用,但是它只支持很少的一些通信协议。

          WSE(Web Services Enhancements)可以和ASMX一起提供与Java EE和其他平台应用通信,可以通过实现各种WS-*的协定,达到通信见更好的安全性,消息传输,事务管理等。

          System.Messaging,它提供了对微软消息队列的一个编程接口,通过它可以实现在网路不太好的情况下与基于Windows技术应用之间的消息传递。

          System.Net,使用这个接口可以创建基于HTTP通信的REST(Representional State Transfer)的应用。

      如果使用传统的技术实现该框架要用到以上一些甚至于全部的不同的通信手段,而WCF将以上所有技术整合在一起提供了一个统一的松耦合的编程模型框架。

WCF能提供什么

          

           WCF可以和Web Services通信,所以与JAVA EE或者其他平台通过SOAP进行交互不存在任何问题

           如果通信双方都基于WCF,可以通过Encoding将XML Infoset转化为字节流提高传输效率。在WCF中有三种不同方式:Binary, Text, MTOM(Message Transmit Optimized Mechanism),Binary 具有最好的效率,Text具有很好的互操作性,MTOM有利于大量数据的传输。序列化Serialization是将.net 对象转化成XML Infoset,但是想要数据能够通过网络协议传输害的将XML Infoset转化成字节流。

            注:我们可以这样来理解Serialization和Encoding,Sterilization是基于Service Contract的——而实际上它也是定义在Service Contract中,是放在我们的Code中;而Encoding一般由Binding提供,它是和Service无关的,我们一般在Configuration中根据实际的需要选择我们合适的Encoding。WCF把Serialization和Encoding相互分离是有好处的,Serialization手部署环境的影响相对不大,具有相对的通用性,而Encoding则关系到访问Service的性能以及互操作性等方面,和部署环境紧密相关。比如对于一个在一个Intranet内部使用的系统,往往处于提高Performance考虑,我们一般是使用TCP Transport结合Binary,可能在某一天出现的来自于Internet的潜在的调用,我们不得不改用Http作为Transport,并使用Text Encoding。由于Encoding是可配置的,所以在这种情况下,我们只需要改变Configuration文件就可以了。

           WCF还可以象Enterprise Service一样管理对象生命周期和定义分布式事务

           WCF支持一系列的WS约定,可以在不同平台间通信提供安全,可靠性,事务服务。

           WCF的消息队列基于MSMQ可以用于基于微软消息队列应用之间的通信

           WCF可以创建RESTful的客户端和服务。

总结.net remoting WS 和WCF区别

           1. 交互性:          

               .Net Remoting:运行在一个同源的环境,也就是说提供.net to .net的通信

               Web Services: 跨平台和语言的交互,受限制于HTTP协议,并且效率不太高

               WCF:跨平台和语言的交互,可以根据实际场景在所有通信协议中选择。

           2. 通信协议:

               .Net Remoting: HTTP, TCP,SMTP

               Web Services: 使用SOAP(XML via HTTP)只支持单工通信

               WCF:可以使用所有的通信协议,还可以使用命名管道,和微软消息队列,支持双工通信

           3.  宿主

                Web Service只能使用IIS做为宿主

                WCF可以采用自我宿主和IIS为宿主两种方式。

           4.  异常处理

           5.  会话管理

一个Demo

          

References

http://msdn.microsoft.com/library/dd943056.aspx
http://msdn.microsoft.com/zh-cn/library/ms735119.aspx
http://www.cnblogs.com/artech/archive/2009/07/15/1524456.html
http://www.codeproject.com/Articles/45698/WCF-Comparison-with-Web-Services-and-NET-Remoting
http://www.codeproject.com/Articles/29475/Windows-Communication-Foundation-FAQ-quick-starter
http://www.codeproject.com/Articles/38857/WCF-FAQ-Part-5-Transactions

原文地址:https://www.cnblogs.com/salomon/p/2624795.html