NET Framework 远程处理

.NET Framework的远程处理提供了一种进程间通信的抽象方法,使得对象可以在不同应用程序域或计算机之间无缝传递。核心机制是通过对象引用而非副本进行通信,通过代理对象在客户端和服务器之间建立桥梁。配置合适的信道、激活URL和应用程序域,可以实现分布式应用程序的高效交互。
摘要由CSDN通过智能技术生成

NET Framework 远程处理概述

NET Framework 远程处理结构

 

.NET 远程处理基础结构是进程间通信的抽象方法。系统的大部分在运行时无须关心。例如,可以通过值传递或可以复制的对象是自动在不同应用程序域中或不同计算机上的应用程序之间传递的。只需将自定义类标记为可序列化便可使它工作。

然而,远程处理系统的真正优点在于它具有的通信功能,它能够使位于不同应用程序域中的对象相互通信,还能够使位于不同进程中的对象相互通信,即使这些进程使用的传输协议、序列化格式、对象生存期方案和对象创建模式不同,也是如此。此外,远程处理使您可以出于任何原因在通信进程的几乎任何阶段进行干预。

无论您已经实现了一些分布式应用程序,还是只对将组件移动到其他计算机上以增加程序的可伸缩性感兴趣,您都可以非常容易地将远程处理系统理解为一般性的进程间通信系统,它具有一些能够轻松处理大多数方案的默认实现。下面的讨论从使用远程处理进行进程间通信的基础知识开始。

副本与引用

进程间通信需要具备以下条件:存在向进程外的调用方提供功能的服务器对象,存在对服务器对象进行调用的客户端,并具有一个将调用从一端运送到另一端的传输机制。服务器方法的地址是逻辑地址,并且可在一个进程中正常工作,但不能在其他客户端进程中正常工作。要解决此问题,客户端可以通过创建对象的完整副本,然后将该副本移动到客户端进程来调用服务器对象,这样在该客户端进程中就可以直接调用该副本的方法了。

然而,许多对象无法或不应复制和移动到某个其他进程来执行。具有许多方法的非常大的对象不适合复制到或通过值传递到其他进程。通常,客户端仅需要由服务器对象上的一个或几个方法返回的信息。复制整个服务器对象将是对带宽以及客户端内存和处理时间的浪费,因为这种复制将复制可能与客户端需求无关的大量内部信息或可执行结构。另外,许多对象公开公共功能,但是需要用于内部执行的私有数据。复制这些对象会使未经授权的客户端能够查看内部数据,从而造成安全隐患。最后,某些对象使用的数据无法以任何可理解的方式复制。例如,FileInfo 对象包含一个对操作系统文件的引用,此文件在服务器进程的内存中具有唯一的地址。可以复制这个地址,但它在另一进程中将永远不会具有任何意义。

在这些情况下,服务器进程应当向客户端进程传递一个对服务器对象的引用,而不是传递该对象的副本。客户端可以使用此引用来调用服务器对象。这些调用不在客户端进程中执行。相反,远程处理系统收集关于调用的所有信息并将其发送到服务器进程,在该进程中,将解释这些信息并查找正确的服务器对象,然后代表客户端对象向该服务器对象发出调用。然后,调用的结果被发送回客户端进程以返回到客户端。带宽仅用于关键的信息:调用、调用参数以及任何返回值或异常。

简化的远程处理结构

使用对象引用在服务器对象和客户端之间进行通信是远程处理的核心。但是,远程处理结构为程序员提供了更为简单的过程。如果正确配置了客户端,只需要使用 new(或托管编程语言中的实例创建函数)创建远程对象的新实例。客户端接收对服务器对象的引用,然后就可以像该对象位于您的进程中而不是运行在另外一台计算机上一样调用其方法。远程处理系统使用代理对象来产生服务器对象位于客户端进程中的效果。代理是将它们自身显示为某个其他对象的临时代理对象。当客户端创建远程类型的实例时,远程处理基础结构将创建对于客户端来说与远程类型完全相同的代理对象。客户端调用此代理上的方法,而远程处理系统则接收调用,将其路由到服务器进程,调用服务器对象,并将返回值返回到客户端代理,而客户端代理将结果返回到客户端。

远程调用必须以某种方式在客户端和服务器进程之间传送。如果要自己生成远程处理系统,可以从学习网络编程、各种各样的协议和序列化格式规范开始。在 .NET 远程处理系统中,打开网络连接和使用特定协议将字节发送到接收应用程序所需的基础技术的组合被表示为传输信道。

信道是一个承载数据流、根据特定网络协议创建包并将该包发送到另一台计算机的类型。某些信道只能接收信息,另外一些信道只能发送信息,还有一些信道(例如默认的 TcpChannelHttpChannel 类)则既可以发送、又可以接收。

虽然服务器进程了解有关每个唯一类型的一切信息,但是客户端仅知道它需要对其他应用程序域(可能在其他计算机上)中的某个对象的引用。从服务器应用程序域之外的世界中,URL 可定位该对象。向外部世界表示唯一类型的 URL 是激活 URL,它们确保远程调用是针对正确类型发出的。有关更多详细信息,请参见激活 URL

完整的远程处理系统设计

假定您的应用程序在一台计算机上运行,而您想使用由存储在另一台计算机上的类型公开的功能。下图显示常规的远程处理过程。

 

远程处理过程

 


远程处理过程

如果关系两端均正确配置,则客户端仅创建一个服务器类的新实例。远程处理系统创建一个表示该类的代理对象,并向客户端对象返回一个对该代理的引用。当客户端调用方法时,远程处理基础结构将处理调用,检查类型信息,并通过信道将该调用发送到服务器进程。侦听信道获得该请求并将其转发给服务器远程处理系统,服务器远程处理系统查找(或在必要时创建)并调用被请求的对象。然后,此过程将反向进行,服务器远程处理系统将响应捆绑成消息并由服务器信道发送到客户端信道。最后,客户端远程处理系统通过代理将调用的结果返回给客户端对象。

为使此过程工作只需要非常少的实际代码,但应当认真考虑关系的设计和配置。即使代码完全正确,仍然可能因为 URL 或端口号不正确而失败。有关更多信息,请参见配置

虽然远程处理进程的这种高级别概述相当简单,但低级别的详细信息可能是非常复杂的。其他主题中提供了对远程处理的主要元素更为深入的讨论,如下面所列出的主题所示。

请参见

 

.NET 远程处理使您能够轻松地构建大范围分布式应用程序,而不管应用程序组件是全部集中在一台计算机上还是分布在世界各地。您可以生成这样的客户端应用程序:它们使用同一台计算机(或可通过网络达到的其他任何计算机)上的其他进程中的对象。您还可以使用 .NET 远程处理与同一进程中的其他应用程序域进行通信。(有关应用程序域编程的详细信息,请参见对应用程序域进行编程。)

.NET 远程处理为进程间通信提供了一种抽象的方法,它将可远程处理的对象与特定客户端或服务器应用程序域以及特定的通信机制隔离开来。因此,这很灵活且很容易自定义。可以用一种通信协议替换另一种通信协议,或者用一种序列化格式替换另一种序列化格式,而不必重新编译客户端或服务器。此外,远程处理系统假定没有特别的应用程序模型。可以从 Web 应用程序、控制台应用程序、Windows 服务,即差不多可以从希望使用的任何程序中进行通信。远程处理服务器也可以是任何类型的应用程序域。任何应用程序都可以承载远程处理对象并向其计算机或网络上的任何客户端提供服务。

Note注意

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值