架构设计专栏01-跨程序域通信

来源:互联网 发布:linux命令chm 编辑:程序博客网 时间:2024/05/17 06:13

引子

我们知道每个进程都有独立的内存空间,两个不同进程的内存空间有相互的边界,是相互隔离的。一个进程不能直接访问另外一个进程的内存。如果要访问的话就涉及跨程序域通信。


跨程序域通信

在运行于不同进程中的对象建立通信,即为跨程序域通信。这种通信常见于分布式应用程序。要建立端到端之前的通信,需要了解通信流两端上的对象,低级别协议的宿主,应用程序编程接口,配置工具文件等。一般来说要实现跨程序域通信要传递可远程处理的对象。正常情况下某个程序中创建的对象只能在此程序中直接调用,如果要给其它程序域以外使用,则要经过一些特别的处理。程序域以外可以访问的对象即可远程处理的对象,可以使用代理在其应用程序域或上下文之外进行访问,也可以复制它们并且可以将这些副本传递到它们的应用程序域或上下文外。可远程处理的对象一种是通过引用传递,一种是通过值传递。

值封送(MBV,MashalByValue):对象被复制并从应用程序域传递。通过值传递的需要将对象序列化(实现ISerializable接口或者添加SerializableAttribute修饰通知系统自动序列化)。这种方式可以减少跨网络、进程和应用程序域边界的冗长而耗费资源的往返过程,非常高效。

引用封送(MBR,MashalByRefObject):为对象创建代理,用于客户端远程访问。通过引用传递的需要对象继承扩展MarshalByRefObject。传递时须成功通过上下文边界、应用程序边界,通过每个边界时会占用一定的处理时间。


实现方法

一、传值方式
1.Windows Api 中FindWindow找到窗口,然后SendMessage通信(适用于有Windows的场景)
2.Socket通信
3.数据序列化存储在文件,内存当中

二、传引用方式

1.创建代理对象实现+Remoting。传递的对象须从System.MarshalByRefObject类继承
2.WCF
3.命名管道



原创粉丝点击