深度探索.Net Remoting基础架构

Inside .Net Remoting architecture

 

 

深度探索?可能有些不确切,或许有些夸张,将就着吧。

 

1.Net Remoting基于如下5个核心对象类型:

Proxy:在Client端伪装为Remote Objects并转发对Remote Objects的调用。

Message:消息对象包含了执行Remote Methods调用的必要数据参数。

Message Sink/Channel Sink:在Remote调用中,Message Sink允许定制消息处理流程,这是.Net Remoting内置的可扩展特性。

Formatter:也是Message Sink,用来序列化消息,已适于网络传输,如SOAP

Transport Channel:也是Message Sink,用来传输序列化的消息到远程进程,如HTTP

 

下面是Client applicationRemote Object的简要调用流程:

This figure is from the book named Advanced .Net Remoting.

 

当访问Remote Objects时,Clientapplication并不处理真实对象的引用,而是仅仅调用Proxy对象的方法。Proxy对象提供与Remote Objects相同的接口,伪装成Remote ObjectsProxy对象自己并不执行任何方法,而是以消息对象(Message Object)的形式转发每一个方法调用给.Net Remoting Framework

 

2Proxy对象的创建及其属性

Client端通过new或调用Activator.GetObject()方法来获取Remote Object引用时,.Net Remoting Framework创建2Proxy Objects。第一个是TransparentProxy实例(from System.Runtime.Remoting.Proxies)。这个对象将从new关键字创建Remote Objects时返回。

无论何时当你访问Remote Object的方法时,实际上是调用TransparentObject对象的方法。这个Proxy拥有一个RemotingProxy对象的引用,RemotingProxy继承抽象类RealProxy

在创建Proxy对象的过程中,需要引用Client端的Messag Sink ChainSink Chain的第一个Sink对象的引用保存在RealProxy对象的Identity属性。如下图所示:



通过VS.Net调试窗口,也可以观测到Proxy对象的一些重要属性:



通过在Client/ServerMessageSink中添加一些定制的Sink及其Sink Provider,就可以扩展.Net Remoting Framework的缺省功能,如LOG日志,加密,压缩等等特性。

 

 

Reference:

1, Ingo Rammer, Advanced .Net Remoting – C# Edition


posted @ 2004-10-22 05:12  Rickie  阅读(3425)  评论(1编辑  收藏  举报