深度探索.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 @   Rickie  阅读(3441)  评论(1编辑  收藏  举报
编辑推荐:
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
点击右上角即可分享
微信分享提示