分布式系统的新型框架—.NETRemoting

2012-09-21 07:14范文广黄存东
长春大学学报 2012年10期
关键词:接收器调用生存期

范文广,黄存东

(安徽国防科技职业学院,安徽 六安 237011)

随着计算机的发展,特别是软件技术的开发,对开发人员的开发效率要求越来越高,而传统的开发工具和技术存在较大的限制,.NET是专门为程序员设计,具有很强大的功能,在此平台上开发应用程序将变的非常容易。.NET Framework[1]是.NET的精髓,在.NET Framework中所创建的对象不可避免地将同其他主机上的对象通信,在此过程体系结构中都要通过Remoting来实现。

1 Remoting

在.NET Framework中,对象与对象之间或进程与进程之间相互通信[2]的方式是Remoting。在调用系统服务提供的方法时,不能把所有的服务导入应用程序且运行它的一个方法,而是通过调用请求,按照一定的规则插入正在运行的进程,这样才能使对象的运行保持安全、有效。

进程之间的通信是由多种线程模型和调度机制来完成,在分布式应用中,进程边界问题会大量增加,通过向应用服务器调度一个线程时,必须遵守一定的规则获得对象的访问权,同时按照一定的方式包装对象以便传送。在.NET[3]中,对于边界问题的处理通过应用程序域去实现,通过.NET Remoting提供的服务会使不同应用程序域中的对象相互交互和通信。通信选项的设置可以在配置文件中进行控制,一般可以选用TCP/IP、HTTP或其他任何一种传输协议;选用XML/SOAP或其他通用的串行化格式;可以通过服务器或客户机激活对象。

2 Remoting体系结构

2.1 通道

通道是一种消息传输机制,是通过设置一定的协议和格式实现远程应用程序与.NET Framework之间对话,是通道接收器的集合,又称之为接收器链,它为信息的传送和接收提供特殊的协议。.NET Framework为我们提供了两个完整的通道:TcpCHannel和HttpCHannel,它们分别在Tcp和Http命名空间中,可供服务器和客户端收发消息使用,可在对象中使用这类型而不必考虑通道接口的细节。

若要利用Remoting进行通信,就必须有可用的通道,.NET Framework通过Configuration类来处理通道的注册。在服务器和客户端对象的通信过程中,若客户端应用程序要从服务器对象返回一个对象或值时,就必须注册一个客户端侦听通道并与服务器使用的通道相兼容,使用相同格式化接收器和协议,使消息串行化和解串。通道注册的端口往往是唯一的,它们的结合也形成了一个唯一传输路径。

2.2 应用程序域

应用程序域[4]是整个Framework内的隔离机制,是为应用程序设立的执行边界,在不同域的对象之间通信和调用对象时,必然要用Remoting使得通信和调用顺利进行,如同操作系统中的进程隔离。在一个应用程序域中可以有多个进程,其本身可作为一个逻辑进程,在有托管代码的地方使用隔离。

应用程序域通常用在不同服务器间通信的时候和出于安全原因,前者主要是不同物理服务器创建的对象不能存于同一个域中,后者是一个应用程序失败不会导致其他应用程序失败,在逻辑进程之外也不能复制对象的内部状态,不会影响域外的其他对象。一般可以通过System.AppDomain类来配置应用程序域,域的边界可由.NET Framework运行主机如ASP.NET、internet Explorer等进行设置。

2.3 Remoting体系结构

在服务器和客户端进行通信过程中,当调用远程对象的方法时,需要在客户端配置一个合适的通道来实现,比如:

注册完通道后,可以在配置文件中通过指定的URI的方法来访问远程对象。

通道注册完并请求对象后,在远程运行时将在客户端应用程序域中创建一个代理,远程系统将处理发送给对象的信息,经过格式化接收器串行化[1]后,在通道中传送,这些信息通过服务器格式化接收器解串,按来时的路径回送返回值。具体过程如图1所示。

图1 Remoting过程中涉及的对象

3 Remoting激活

远程对象一般可通过服务器或客户端两种方式激活,根据激活方式的不同来决定对象的位置以及其生存期,他们的主要区别是,创建对象的时间和对象的生存期。

3.1 服务器激活

服务器激活对象是指对象的生存期是由服务器上的主机服务来控制,只有在客户端发出方法调用请求时才被激活。其中主机服务是为某个或多个库的集合充当主机角色的应用程序,对象的创建方法是由客户端配置所控制。客户端配置了Well-Known对象时并且是服务器激活的,在客户端有两种对象引用的方法,一种是用Activator.GetObject调用:

这两种引用都依赖于使SimpleLibrary对象在指定的终点可用的本地引用的类型信息,因此无论Well-Known配置使用new操作符,还是在客户端使用GetObject时,都要从已知类型创建一个本地代理而无须向服务器发出请求,从而不能在远程对象上使用参数化的构造函数。

3.2 客户端激活

客户端激活对象的生存期由客户端控制,是在对象引用时向服务器发出请求以创建对象的实例,服务器上的对象会在客户端对象调用完后自动销毁。客户端在向同一个对象发出请求后,会收到该对象的新实例,这时我们可以调用RemotingConfiguration.RegisterActivatedClientType来把远程对象设置成客户端激活对象,该调用要使用对象类型及其URI。

在此调用中,没有服务器的类型名称,因为在服务器上注册客户端激活时无须调用一个终点。为使服务器根据客户端的请求激活对象,必须使用RemotingConfiguration.RegisterActivatedServiceType而不是Wellknown类型。

3.3 生存期服务

服务器激活对象是通过配置为Singletons或SingleCall对象来控制其生存期[5]。SingleCall对象是在客户端第一次调用时创建的,当返回后就销毁。Singletons则是由一个方法调用创建的,其生存期在服务器上是可以配置的,无论对象有没有使用,它都会生存到其租借期结束为止。租借期作为对象上的租借时间,可以由对象创建者设置,或由对象自己设置,在租借期过期后将由无用单元回收器回收,在租借期内被使用的话,对象可以续借新的租借时间。

Well-Know类型可以由主机服务配置租借期,也可自己控制其生存期。一般在机器配置文件中,第一次激活为30秒,租借期过期前再次请求是2秒钟;客户端激活租借期是通过RemotingServicee.GetLifetimeService来获得租借期引用。

4 结语

在.NET Framework中,Remoting Framework处理远程对象间的交互。客户端通过一定的通道和终点URI向远程对象发出请求,此时由Remoting为客户端创建引用,并可以使用服务器激活或客户端激活方式,前者可以在已注册的Well-known类型[6]上用new操作符创建,也可用GetObject创建基于本地注册类型的代理来实现;后者可通过new操作符或CreateInstance来获取客户端激活对象。

[1]Kevin Hoffman.NET Framework高级编程[M].北京:清华大学出版社,2002.

[2]李乃乾.NET Remoting及其在证券实时分析系统中的应用[J].计算机与数字工程,2010(1):164-189.

[3]叶嵩.基于Web技术的协同办公系统设计[M].成都:电子科技大学出版社,2005.

[4]栾成军,谭闻捷.基于Remoting设计安全的数据库系统[J].电脑知识与技术,2008(7):1191-1194.

[5]王翔.基于.NET Remoting的CNG管理系统的设计与实现[J].计算机系统应用,2009(5):5-8.

猜你喜欢
接收器调用生存期
核电项目物项调用管理的应用研究
LabWindows/CVI下基于ActiveX技术的Excel调用
JXG-50S型相敏轨道电路接收器自动测试台
基于系统调用的恶意软件检测技术研究
鼻咽癌患者长期生存期的危险因素分析
新型二取二结构的25Hz微电子相敏接收器数据处理方法研究
胃癌术后患者营养状况及生存期对生存质量的影响
术中淋巴结清扫个数对胃癌3年总生存期的影响
健脾散结法联合化疗对56例大肠癌Ⅲ、Ⅳ期患者生存期的影响
IDT推出超紧凑型无线电源接收器,可节省70%板面积