对象
分布式体系中,可远程处理的对象主要有两种:一是按值封送对象,它们被复制并传出应用程序域;二是按引用封送对象,将为其创建代理,而该代理由客户端用于远程访问对象。下面详细介绍这两种对象。
按值封送对象对于按值封送(MarShal By value,MBV)对象而言,远程处理系统创建这些对象的完整副本并将副本传递到进行调用的应用程序域。一旦副本到达调用方的应用程序域内,对它的调用就是对该副本的直接调用。而且,当MBV对象作为参数传递时,也是通过值传递的。
只需要声明它们的序列化规则,就可以将对象作为MBV对象。具体的方法有两种:通过实现ISerializable接口来实现其自身的序列化;或者通过用serializableAtt舶ute修饰,该属性通知系统自动序列化该对象),但是不扩展MarShalByRefobject。
远程处理系统广泛使用可序列化的对象。仅传输数据的对象通常是MBv对象。例如,实现了ISerializable接口的DataSet对象。
由于性能等方面的原因,将对象的完整状态和任何可执行功能移动到目标应用程序域有意义时,应当使用MBV对象。这减少了跨网络、进程和应用程序域边界的代价。
按引用封送的对象按引用封送(MarShal By Reference,MBR)的对象是至少扩展System::MarshalByRefObiect的可远程处理的对象。
当客户端创建MBR对象的实例时,.NET远程处理基础结构在调用方中创建一个代理对象,客户端将在该代理对象上进行调用;远程处理封送这些调用,将它们发送回起始应用程序域,并在实际对象上执行该调用。(如果客户端位于与MBR对象相同的应用程序域中,基础结构将向客户端返回对该MBR对象的直接引用,从而避免封送处理的系统开销。)2
关键技术1.侦听
代理与占位程序(在.NET中称为调度程序)将客户或服务器端的函数调用转换成消息,然后通过网络发送。这叫作侦听(Interc印tion),因为代理和调度程序截获方法调用并将其发送到远程目的地。与CoM不同,由于元数据提供了相关的信息,所以CLR可以生成代理与占位程序,不需要自己编写。
代理(proxy)将函数调用从栈结构上取出来,并将其转换成一个消息。这个消息之后被发送到它的目的地。调度程序接收这个消息,并将其转换到栈结构,这样来完成对象的调用。
代理从发出调用的客户的栈结构上取一个整数参数id,将其放入一个消息中,该消息编码了这个调用及其参数。在服务器端,调度程序接收该消息,并在服务器的栈上为UnregistersCustomer(int id)创建一个函数调用,然后产生对象的调用。客户与服务器代码不需要知道它们进行了远程处理。
2.信道与格式化程序
格式化程序(Formatter)将消息转换到一个字节流。.NET框架带有两个格式化程序,二进制与SOAP。转换后的字节流通过通信信道发送出去。
虽然可以编写自己的信道,但NET框架还是提供了两个信道。HTTP信道使用HTIP协议,适用于在Internet 上或通过防火墙进行通信。TCP信道使用TCP(sockets)协议,设计用于高速通信。格式化程序与运输方法有四种排列:在TCP上传送二进制、在HTTP上传送二进制、在HTTP上传送SOAP和在TCP上传送SOAP。
工作过程当一个客户端调用另一个应用程序域内的某个对象的方法时,它首先由客户应用程序域内的一个代理(pmxy)对象处理。这个代理是远程对象在客户应用程序域中的一个代理人,使客户表现得仿佛“对象就运行于本机”似的。CLR运用反射(reflection)来访问正被访问的远程对象的元数据,自动创建一个代理。请注意,这意味“内含远程对象之类和,或接口”的程序集,必须也可在客户机器上取得。
代理最终会将调用信息交给一个通道(channel)对象。这个通道对象负责使用某种适当机制,比如一个TCP连接(connection),将客户的请求传给远程应用程序域。一旦这个请求到达目的地,运行于该处的一个通道对象便找出这个调用所要送达的目标对象(target object),如果彼时该对象尚未运行起来,就创建它并将此调用传递给该对象,后者执行这个调用,并通过相同的路径传回结果。3
应用可以想像,远程处理的应用种类是很有限的.多数公司将利用现有的通信网络来实现几种不同的应用.为了突出通信网的应用潜力,我们对一般的远程处理应用作如下分类.
电子邮件。电子邮件通常与办公自动化相联系。在电子邮件应用中,计算机是给公司内、外人员发送消息的一个工具。对整个单位的每个人员都分配一个电子邮政信箱,用以接收和存放消息。通过一个电子标志。来通知区域级经理有关的消息。区域级经理可以要求将有关消息显示在视频终端的显示屏上,如果需要,还可以打印一份硬拷贝。
查询/回答。在查询/回答这类应用中,操作员(也可能是用户经理)进行某种查询,然后计算机(经由信息系统)作出回答。例如,人事经理可能要求查询某个特定职工的培训记录。一个百货公司销售员可能要求查询某个顾客的赊帐限度。
字处理。在字处理应用中,操作员利用软件来进行正文处理。尽管当前多数的字处理是用一台单独的设备来完成的,但是也有许多公司为了充分利用数据库而使用功能更强的主处理机的软件来进行字处理。
数据录入。经由通信网络可以从远程地点直接将数据录入到系统中。例如,银行分行的出纳员可以在每项银行事务出现时,直接将它录入系统。
数据收集。在有些情况下,将利用通信网络来收集数据。一个典型的例子是在一家百货公司销售网上各销售点(POS)终端。在整个工作日中,每个销售事务被自动记入一个计算机文件。数据被收集和分批以供处理。过程控制。数据通信也被用在过程控制上。
远程计算。通信网络给最终用户提供了利用计算机进行计算的机会。在一个大公司的研究中心里,通常有400个以上的工程师和科学家使用约15O台远程终端进行科学或工程计算。
交互式程序设计。应用程序员或系统程序员以及用户利用远程终端直接访问训‘算机来编写他们的程序。利用联机调试辅助软件和直接诊断程序将更容易进行程序的开发。
诊断估计。用户工程师在远程设备上定期使用诊断软件来查出诊断软件或机器错误的根源。4