zoukankan      html  css  js  c++  java
  • 深度探索.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


  • 相关阅读:
    快排原理讲解
    Kafka原理详解
    java中的基本数据类型转换
    centos7关闭防火墙
    安装Linux基本工具
    Kibana笔记
    虚拟机配置net模式
    2019-10-12,html+php+mysql简单留言板,作业
    2019-10-11:渗透测试,基础学习,php+mysql连接,笔记
    2019-10-10:渗透测试,基础学习,mysql语法基础,笔记
  • 原文地址:https://www.cnblogs.com/rickie/p/55292.html
Copyright © 2011-2022 走看看