远程方法调用发展到现在,已经有以下几种框架实现:dce/rpc,corba,dcom,mts/com+,java rmi,java ejb,web services/soap/xml-rpc,net remoting,本文主要介绍了.net远程方法调用的原理,实现以及与微软com/dcom实现的异同点. 【推荐阅读:一段VB.NET代码,生成邮件,发送邮件】
远程方法调用 【扩展信息:VS的控件真是不好用,好不容易才搞定Da】microsoft .net remoting 提供了一种允许对象通过应用程序域与另一对象进行交互的框架.众所周知,web服务仅仅提供了一种简单的容易理解的方法来实现跨平台,跨语言的交互,而dotnet remoting相对于web服务就像asp相对于cgi那样,实现了一种质的转变.dotnet remoting提供了一个可扩展的框架,它可以选择不同的传输机制(http与tcp是内置的),不同的编码方式(soap以及二进制代码),安全设置(iis或ssl),同时提供了多种服务,包括激活与生存期支持.
对于远程方法调用来说,最直接的问题恐怕是:一个本地方法,推而广之,一个本地对象,如果放在网络环境中,如何传递这个方法的调用,返回,如何传递这个对象的请求.虽然对于应用开发人员来说这个并不是必不可少的事,但对于我们学习分布式操作系统来说,我想这是应该搞清楚的.我们知道,dcom协议也被称为对象rpc,它建立在dce rpc协议基础上,也就是说,在网络传输这一层,它必须使用特殊的协议.另外windows rpc 机制要求熟悉的类型与使用 idl 工具的封送处理知识,并向开发人员公开 rpc 客户端与服务器存根的管理.remoting 在为 .net 提供 rpc 时要容易得多,而且由于使用简单易懂的 .net 数据类型,从而消除了早期 rpc 机制中存在的类型不匹配的情况(这是一个非常大的威胁).配置为使用 http 或 tcp 协议,并使用 xml 编码的 soap 或本机二进制消息格式进行通信.开发人员可以构建自定义的协议(通道)或消息格式(格式化程序),并在需要时由 remoting 框架使用.服务器与客户端组件都可以选择端口,就象可以选择通信协议一样.由此带来的一个好处是,很容易建立并运行基本的通信.下图中描述了.net remoting的五要素:代理:在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.当访问remote objects时,client端application并不处理真实对象的引用,而是仅仅调用proxy对象的方法.proxy对象提供与remote objects相同的接口,伪装成remote objects.proxy对象自己并不执行任何方法,而是以消息对象(message object)的形式转发每一个方法调用给.net remoting framework.在类型支持方面,dcom提供了一套复杂的列集与散集机制,他建立在rpc的基础上.... 下一页