.NET Web服务和Remoting:哪个更好?

ZDNet软件频道 时间:2003-06-11 作者:ZDNet China 周靖 译 |  我要评论()
本文关键词:
微软一直在宣扬用Web服务来构建应用程序的好处,而且它的.NET框架确实简化了Web服务的使用。假如客户端和组件都在防火墙内部,由于所有数据都要通过一个Web服务器,所以有可能影响性能。为加快速度,微软提供了一种名为Remoting的二进制机制。
本文译自Builder.com,未经许可请勿转载微软一直在宣扬用Web服务来构建应用程序的好处,而且它的.NET框架确实简化了Web服务的使用。但是,虽然Web服务确实好用,但最适合使用它的场合是:位于防火墙外部的客户端通过因特网调用你的服务器上的组件。

假如客户端和组件都在防火墙内部,Web服务也许能很好地工作,但由于所有数据都要通过一个Web服务器,所以有可能影响性能。为加快速度,微软提供了一种名为Remoting的二进制机制。

下面来看看Remoting具体如何工作,本文将用一些示范代码展示如何在一个Web服务中设置它。

.NET Remoting

虽然Web服务总体上说是从公司外部的客户端访问组件的最佳方式,但公司内部的组件又如何呢?许多公司的Web服务是在内部使用的。使用Web服务本身并没有错,只是它无法提供最佳的性能。如果组件是用.NET创建的,而且客户端应用程序也是.NET,就可将组件放到共享服务器上,并通过Remoting来访问它们。

Remoting是用于取代DCOM的一种.NET技术,它采用二进制格式在客户端应用程序和组件之间通信。这样一来,远程组件的速度快于Web服务。但是,创建远程组件的难度较大,因为你必须在自己的组件中添加附加的代码。这些代码虽然并不比Web服务的代码复杂多少,但你不能直接实例化一个远程组件。相反,必须创建一个主机应用程序,由它实例化组件并侦听请求。好消息是,这个主机可以是一个Windows服务、Windows应用程序、控制台应用程序或者能够运行并保持对象打开状态的其他任何东西。

你不仅要创建主机应用程序,还必须做出有关远程对象的几项决策,比如要使用哪个通道(channel)。.NET支持HTTP和TCP通道。HTTP通道实际使用SOAP协议将消息传输给远程对象,或者从远程对象传回消息。这意味着所有消息都要序列化成XML格式。TCP通道则使用一个二进制的流来传输消息。

接着,必须在两种激活模式中选择其一:Singleton和SingleCall。其中,Singleton类型在任何时候都只有对象的一个实例。所有客户端请求都由那个实例提供服务。这样就允许你在请求之间“共享”数据,或者在不同请求之间维持状态。另一方面,SingleCall类型会为每个客户端请求都创建一个新的对象实例。SingleCall对象更像是Web服务,因为它们是无状态的,而且会针对每个请求创建和销毁。

远程组件在改变通道时,不需要重新编译,这一点要归功于.NET巧妙的设计。你可将通道文件放到一个配置文件中,并从TCP变成HTTP,或从HTTP变成TCP,应用程序无需重新编译。类似地,你可为客户端更改配置文件,与主机使用的通道相匹配。


百度大联盟认证黄金会员Copyright© 1997- CNET Networks 版权所有。 ZDNet 是CNET Networks公司注册服务商标。
中华人民共和国电信与信息服务业务经营许可证编号:京ICP证010391号 京ICP备09041801号-159
京公网安备:1101082134