- 1、本文档共38页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
一远程对象C
远程对象和多层架构
远程处理(Remoting)技术概述
做为企业级架构,对象的远程处理是必备的功能,非此不能实现大型分布式体系。
.NET实现分布式体系主要利用两种体系,一种是建立在Windows Service架构下的Remoting技术,另一种是建立在Web Service架构下的技术,这两种技术各有利弊,合理使用,才能兴利除弊,构造高效的分布式体系。
NET平台提供了一套专门用于远程处理的类。在公共语言运行库中,有一个远程处理结构,它提供了一组丰富的类,这些类使开发人员可以不必考虑大部分部署和管理远程对象的复杂工作,对远程对象调用方法也几乎与调用本地方法相同。
这样一来,构造复杂大型的网络系统就成为了可能。
并不说有的对象都能在分布式体系中运行的,可远程处理的对象是能在大范围的分布环境中正常运行的对象。有两种主要的可远程处理的对象:
按值封送对象,它们被复制并传出应用程序域。
按引用封送对象,将为其创建代理,而该代理由客户端用于远程访问对象。
按值封送对象:
按值封送 (MBV) 对象声明它们的序列化规则(通过实现 ISerializable 来实现其自身的序列化,或者通过用 SerializableAttribute 修饰,该属性通知系统自动序列化该对象),但是不扩展 MarshalByRefObject。远程处理系统创建这些对象的完整副本并将副本传递到进行调用的应用程序域。
一旦副本到达调用方的应用程序域内,对它的调用就是对该副本的直接调用。而且,当 MBV 对象作为参数传递时,也是通过值传递的。除声明 SerializableAttribute 或实现 ISerializable 之外,无需做其他任何事情就可以将类的实例跨应用程序或上下文边界通过值传递。
当由于性能或处理原因,将对象的完整状态和任何可执行功能移动到目标应用程序域有意义时,应当使用 MBV 对象。在许多方案中,这减少了跨网络、进程和应用程序域边界的冗长而耗费资源的往返行程。MBV 对象还可以从对象的原始应用程序域内直接使用。在这种情况下,由于不进行任何封送处理,因此不创建任何副本而且访问非常高效。
另一方面,如果发布的对象非常大,那么在繁忙的网络上传递整个副本对于应用程序来说可能不是最佳的选择。此外,永远不会将对复制对象的状态所做的更改传回到起始应用程序域中的原始对象。在抽象级别上,这种方案类似于客户端浏览器所请求的静态 HTML 页的方案。服务器复制文件,将其写入到流中,发送出去,然后忘掉它。所有后续的请求都只是对其他副本的其他请求。
远程处理系统广泛使用可序列化的对象。对其他应用程序域中的对象的引用(由 ObjRef 类在远程处理系统中表示)本身是可序列化的;必须能够将它精确地复制并将副本发送给请求。同样,对于实现 IMessage 的消息对象也是如此,这是因为它们是调用信息和所有其他所需对象引用的一般容器。另外,仅传输数据的对象通常是 MBV 对象。例如,DataSet 扩展实现 ISerializable 的 MarshalByValueComponent。
按引用封送的对象:
按引用封送 (MBR) 的对象是至少扩展 System.MarshalByRefObject 的可远程处理的对象。根据已声明的激活类型,当客户端在自己的应用程序域中创建 MBR 对象的实例时,.NET 远程处理基础结构在调用方的应用程序域中创建表示该 MBR 对象的代理对象,并向调用方返回对此代理的引用。然后客户端将在该代理上进行调用;远程处理封送这些调用,将它们发送回起始应用程序域,并在实际对象上调用该调用。
注意 如果客户端位于与 MBR 对象相同的应用程序域中,基础结构将向客户端返回对该 MBR 对象的直接引用,从而避免封送处理的系统开销。
如果 MarshalByRefObject 作为参数传入,当调用到达时,它变成另一个应用程序域中的代理。MBR 返回值,并且 out 参数以相同的方式工作。
当对象的状态和任何可执行的功能应处在创建它的应用程序域中时,应当使用 MBR 对象。例如,具有内部字段且该内部字段是操作系统句柄的对象应扩展 MarshalByRefObject,这是因为操作系统句柄在其他进程中或其他计算机上的其他应用程序域中是无意义的。有时对象可能大得难以想象;对于功能强大的服务器还行,但通过网络发送到 33.6 kbps 的调制解调器就不行了。
“远程处理”是内置到公共语言运行库中的框架,它可用于生成复杂的分布式应用程序和网络服务。我们首先要了解几个重要的概念:
代理对象。
当客户端创建远程对象的实例时,它接收服务器上该类实例的代理。对代理调用的所有方法都将自动转发到该远程类,并且任何结果都将返回到客户端。从客户端的角度来看,此过程与进
文档评论(0)