• 深度探索.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


  • 相关阅读:
    $scope.$watch监听
    git 修改地址,及提交返回403错误原因
    wepy wx:getLocation 配置 permission
    vue-cli 3.x 导入jquety
    微信小程序、微信公众号、H5之间相互跳转
    微信小程序之滚动选择器
    软件开发过程中所需要的文档
    Git 常用命令详解
    小程序填坑--TypeError: this.setData is not a function
    使用tomcat时,不用给webapps文件放入文件,直接访问项目方法
  • 原文地址:https://www.cnblogs.com/rickie/p/55292.html
Copyright © 2020-2023  润新知