NET方向各通信方式的概念
.NET 中的通信选项:种类&比较 (From MSDN)
WebService 与 Remoting之间存在的差异
安全的差异
基于 HTTP 的应用程序,ASP.NET 和 .NET 远程处理使用 IIS 所提供的安全服务。当 .NET 远程处理在 IIS 之外(例如,在 Windows 服务中)承载时,它不会提供任何安全服务。
速度的差异
.NET 远程处理为您提供了使用二进制编码和默认 TcpChannel(它提供最佳的进程间通信性能)的选项,因此它相对于用 ASP.NET 生成的 XML Web services 而言具有潜在的性能优势。用 ASP.NET 生成的 XML Web services 始终会使用 SOAP 编码,该编码的性能通常低于二进制编码。
WCF基础概念介绍
Microsoft以前的分布式计算技术特性和应用领域不同。要构建基本的可互操作的 Web 服务,最佳选择是 ASP.NET Web 服务(ASMX)。要连接两个基于 .NET Framework 的应用程序,选择 .NET Remoting。如果应用程序需要分布式事务和其他更高级的服务,其创建者一般会使用企业服务Enterprise Sevices,即COM+ 的继任者。要构建Web 服务安全,使用WS-Addressing 和 WS-Security规范,开发人员可以构建采用 WSE3.0的应用程序。而要创建基于消息的排队式应用程序,基于 Windows 的开发人员则应使用 Microsoft 消息队列 (MSMQ)。
WCF(之前的版本名为“Indigo”)是使用托管代码建立和运行面向服务(Service Oriented)应用程序的统一框架。它使得开发者能够建立一个跨平台的安全、可信赖、事务性的解决方案,且能与已有系统兼容协作。WCF是微软分布式应用程序开发的集大成者,它整合了.Net平台下所有的和分布式系统有关的技术,如Enterprise Sevices(COM+).Net Remoting、Web Service(ASMX)、WSE3.0和MSMQ消息队列。以通信(Communiation)范围而论,它可以跨进程、跨机器、跨子网、企业网乃至于 Internet;以宿主程序而论,可以以ASP.NET,EXE,WPF,Windows Forms,NT Service,COM+作为宿主(Host)。WCF可以支持的协议包括TCP,HTTP,跨进程以及自定义,安全模式则包括SAML, Kerberos,X509,用户/密码,自定义等多种标准与模式。也就是说,在WCF框架下,开发基于SOA的分布式系统变得容易了,微软将所有与此相关的技术要素都包含在内,掌握了WCF,就相当于掌握了叩开SOA大门的钥匙。(参考MSDN)
.Net几种通信方式对比
.Net Remoting
1 仅能使用在.Net平台上
2 信道可以是"Http/Tcp/IPC",也可以自定义扩展
IPC:本机进程之间传输协议,相当快,如果客户端和服务端不在一台机器上,不能使用此进程。尽量使用TCP协议,效率高。
3 可以使用Binary/Xml/Soap等封装通信中的对象
4 .NET Remoting是一个对应于DCOM的技术,提供了一种允许对象通过应用程序域与另一对象进行交互的框架,较DCOM更容易实现、配置和安全,支持更多的协议
5 使用remoting一般都喜欢定义为TCP,这样比Web Service稍为高效一些,而且是有状态的。
6 Remoting一般需要通过一个WinForm或是Windows服务进行启动,也可以使用iis部署,而Web Service则必须在IIS进行启动。
Web Services
1 与平台无关的通信模型,兼容性好
2 信道只能是"Http“
3 只能是Soap封装通信中的对象
WCF
.Net3.0提供的统一通信模型,融合了.Net Remoting/Web Servcies/MSMQ等多种通信方式
.Net Remoting
dotnet remoing 的中文翻译时远程处理,其实是一种.NET 平台下面很好的一种远程处理调用,提供了开发的架构。灵活的通讯传输协议,当然也可以自己去扩展。远程对象的调用提供了多种方式,可以使有状态的,也可以使无状态。对于开发人员,感觉根本地调用一样方便。这一点主要却别于Web Service。
其实这种应用类似一个相对耦合的应用。客户端和服务端丰富的通讯模型是基于.NET 平台。也就是说如果客户端不一定是.NET 平台的话,remoting 就显得不是很适合。一个简单的例子就是对象的传递
从remoting 服务端传递一个对象给客户端,可以是对象的远程的一个远程引用,也可以使一个对象的copy,就是我们通常说的mbr 或者mbv[J5]
当然,web 服务是无法实现对象的引用传递,web 服务只能是一个mbv,而web 服务这里的mbv 作的就不够彻底了。我在http://dotnet.mblogger.cn/montaque/posts/2094.aspx
提到他们走的不同的序列化方式。对于web 服务,只是一个很浅的copy。也就是说对象在传递到服务端的时候,并没有把 100% 的状态传递过去。
而remoting 传递的对象就比较地道。或许这就是一个.NET Remoting 相对于web 服务比较更贴近本地调用的一个体现
缺点前面提到了,就是丰富的特性是基于。NET 这个平台。.NET 中通过 System.Runtime.Remoting.Dll
WCF
WCF是对于WebService,.Net Remoting,Enterprise Service,WSE,MSMQ等技术的整合。
WCF最基本的通信机制是SOAP ,这就保证了系统之间的互操作性,即使是运行不同的上下文中。这种通信可以是基于.Net到.Net间的通信。
安全:WS-*
即使对于WCF和ASMX而言,虽然两者都使用了SOAP,但基于WCF开发的应用程序,仍然可以直接与ASMX进行交互。
WebService
首先客户端从服务器的到WebService的WSDL,同时在客户端声称一个代理类(Proxy Class),这个代理类负责与WebService服务器进行Request 和Response,当一个数据(XML格式的)被封装成SOAP格式的数据流发送到服务器端的时候,就会生成一个进程对象并且把接收到这个Request的SOAP包进行解析,然后对事物进行处理,处理结束以后再对这个计算结果进行SOAP包装,然后把这个包作为一个Response发送给客户端的代理类(Proxy Class),同样地,这个代理类也对这个SOAP包进行解析处理,继而进行后续操作。
WebService Remoting WCF基础
WebService是两个计算机之间通讯(交谈)的技术。并且现在炒的很火的SOA、云计算在技术层面上都是WebService。
采用Socket、 .Net Remoting、DCom需要打开很多端口,而企业网络安全的一个基本原则就是“尽可能少的打开端口”
跨防火墙就是走80端口进行通讯
WSDL:A,B,C
Net Remoting
WebService中WSDL相当于对服务端方法的描述;.net Remoting中走的是二进制数据,因此必须一个描述服务端方法的接口类库。
Remoting和WebService的区别:Remoting效率高,走的是普通TCP, WebService则是Http协议,需要IIS、ASP.Net、XML解析等,效率低。Remoting适合于内网通讯, WebService适合于外网通讯。
WCF可以通过修改配置文件,以及极少量的修改代码,达到WebService与Remoting之间的转换.
WCF,WebService都是使用xml格式来进行传输,过程需要序列化,而序列化则是相当耗时的,所以如果数量级较大时,需要采用socket或者remoting[J7] 上进行传输
SOCKET与Remoting
socket传输机制,我们必须花大量的精力来处理异常、断网、死机等现象,使用remoting,这些工作会大大简化。
Tcp通道的Remoting速度非常快。
你可以通过端口查看工具,发现remoting比直接socket传输的内容,应该是属于同一个数量级的。我的另一个担心是,大客户端数量的情况下,remoting传输效率会不会很低,结果经过现场测试,同时对300个客户端进行数据通信,不存在信息丢失情况。
虽然是远程的,但是非常接近于本地调用对象。
也就是完全符合面向对象思想。
注解:
TCP:Transmission Control Protocol 传输控制协议TCP是一种面向连接(连接导向)的、可靠的、基于字节流的运输层(Transport layer)通信协议
HTTP(HyperText Transport Protocol)是超文本传输协议的缩写,HTTP协议采用了请求/响应模型。客户端向服务器发送一个请求,请求头包含请求的方法、URL、协议版本、以及包含请求修饰符、客户信息和内容的类似于MIME的消息结构。服务器以一个状态行作为响应,响应的内容包括消息协议的版本,成功或者错误编码加上包含服务器信息、实体元信息以及可能的实体内容。
IPCChannel是.NET Framework 2.0 里面新增的,它使用 Windows 进程间通信 (IPC) 系统在同一计算机上的应用程序域之间传输消息。在同一计算机上的应用程序域之间进行通信时,IPC 信道比 TCP 或 HTTP 信道要快得多。但是IPC只在本机应用之间通信。所以,在客户端和服务端在同一台机器时,我们可以通过注册IPCChannel来提高Remoting的性能。但如果客户端和服务端不在同一台机器时,我们不能注册IPCChannel。
MBV 就是按值编码,对象存储在数据流中,用于在网络另外一端创建对象 副本。
MBR 就是按引用编组,在客户机上创建代理,远程对象创建ObjRef实例,实例被串行化传递。
SOAP 简单对象访问协议 : 提供了标准的RPC方法来调用Web service。
好了,这里面的东西有点乱,没有排版,只是把自己从网上查询的资料结合自己总结出来的。不过基本的网络通信方面的概念和对比对于我来说比较受用。