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


  • 相关阅读:
    SpringBoot整合Shiro实现基于角色的权限访问控制(RBAC)系统简单设计从零搭建
    Spring Cloud Feign 总结
    Spring Cloud Eureka 总结
    基于Shiro,JWT实现微信小程序登录完整例子
    解决JPA懒加载典型的N+1问题-注解@NamedEntityGraph
    一个微服务+DDD(领域驱动设计)的代码结构示例
    造轮子-AgileConfig基于.NetCore的一个轻量级配置中心
    ASP.NET Core Blazor 初探之 Blazor WebAssembly
    .Net Core
    AServer
  • 原文地址:https://www.cnblogs.com/rickie/p/55292.html
Copyright © 2020-2023  润新知