Welcome

首页 / 软件开发 / .NET编程技术 / WCF分布式开发必备知识(2):.Net Remoting

WCF分布式开发必备知识(2):.Net Remoting2011-02-26 博客园 Frank Xu Lei上一节我们学习了网络分布式编程中的MSMQ消息队列技术.本节我们将学习分布式编程的另外一个重要的技术.Net Remoting,文章的结构还是先讨论基本概念,再来探讨具体的技术实现,希望能和大家一起交流学习.

.Net Remoting技术,我们可以将其看作是一种分布式处理方式。作为应用程序之间通信的一种机制,.Net Remoting与MSMQ消息队列不同,它不支持离线脱机消息,另外只适合.Net平台间程序的通信.从微软的产品角度来看,可以说Remoting就是分布式组件DCOM的一种升级,它改善了很多功能,并极好的融合到.Net平台下。.NET Remoting 提供了一种允许对象通过应用程序域与另一对象进行交互的框架。这也正是我们使用Remoting的原因。为什么呢?在Windows操作系统中,是将应用程序分离为单独的进程。这个进程形成了应用程序代码和数据周围的一道边界。如果不采用进程间通信IPC(Internet Process Connection)机制,则在一个进程中执行的代码就不能访问另一进程。这是一种操作系统对应用程序的保护机制。然而在某些情况下,我们需要跨过应用程序域,与另外的应用程序域进行通信,即穿越边界(参考MSDN)。

.Net Remoting的通信架构如下图.

我们可以通过上图简单理解一下.Net Remoting的通信框架,而现在来介绍一下其中涉及到的几个比较重要的概念:

1.通道(channel),

在.Net Remoting中是通过通道(channel)来实现两个应用程序域之间对象的通信的。首先,客户端通过Remoting,访问通道以获得服务端对象,再通过代理解析为客户端对象。这就提供一种可能性,即以服务的方式来发布服务器对象。远程对象代码可以运行在服务器上(如服务器激活的对象和客户端激活的对象),然后客户端再通过Remoting连接服务器,获得该服务对象并通过序列化在客户端运行。

通道(channel)有4种严格说,很多资料上说有2-3种.应该有4种.HttpChanel和TcpChanel.

(1)HttpChannel。在将远程对象驻留在 ASP.NET 中时,可以使用此通道。此通道使用 HTTP 协议在客户端和服务器之间发送消息。可以使用HTTP协议中的加密机制.需要主机名字和端口号.

(2)TcpChannel。在将远程对象驻留在 操作系统服务或其他可执行文件中时,此通道使用 TCP 套接字在客户端和服务器之间发送消息。同样需要提供主机名字和端口号.不提供任何内置的安全功能。

(3)IPCChanel,进程间通道,只使用同一个系统内,进程之见的通信.不需要需要主机名字和端口号.

(4)自定义通道 。自定义的传输通道可以使用任何基本的传输协议UDPSMTPIPX消息排队等机制进行通信.用户可以根据需要自定义方式协议,因此.Net Remoting相对其他机制更加的灵活。不提供任何内置的安全功能。

2.远程对象(Obeject)

在Remoting中要传递的对象,设计者除了需要了解通道的类型和端口号之外,无需再了解数据包的格式。但必须注意的是,客户端在获取服务器端对象时,并不是获得实际的服务端对象,而是通过代理获得它的引用。远程对象要继承自MarshalByRefObject类,这个可以使远程对象在remoting应用通信中使用,支持对象的跨域边界访问.