.NET 远程处理





3.00/5 (1投票)
在 .NET 中,DCOM 组件的替代品是 .NET 远程处理
概述
DCOM 的替代品是 .NET 远程处理。.NET 远程处理可以描述为
- Web 服务无处不在
- CLR 对象远程处理
使用 SOAP 和 HTTP 只是调用 UDP、IPX 和 SMTP 等远程对象的一种方式。
CLR 对象远程处理位于 Web 服务之上的任何位置。
所有语言结构都可以与远程对象一起使用。
描述
.NET 远程处理用于访问另一个应用程序域中的对象。在远程程序集中,客户端接收到一个代理来与之通信。代理是客户端进程中远程对象的表示,用于调用方法。消息被传递到通道中的远程对象。
.NET 远程处理的架构
- 远程对象:远程对象是在服务器上运行的对象
- 通道:客户端和服务器之间的通信路径
用于通信的两种通道类型是 TCP 和 HTTP。
也可以使用不同的协议的自定义通道。
- 消息:消息保存有关远程对象的信息,包括名称和所有参数。
- 格式化程序:格式化程序定义如何将消息传输到通道中。默认是 SOAP 和二进制格式化程序。
- 格式化程序提供程序:格式化程序提供程序将格式化程序与通道相关联,以将消息发送到线路。
- 代理对象:代理对象有两种类型
- 透明
- 真实
透明代理对于客户端来说就像一个远程对象。透明代理调用真实代理上的 invoke ()
方法。
- 消息接收器:消息接收器是客户端和服务器上的拦截器。消息接收器与通道相关联。
invoke ()
方法使用消息接收器将消息传递到通道。真实代理(服务器上的代理)使用消息接收器将消息传递到通道,因此接收器可以在消息进入通道之前进行一些拦截。 - 激活器:激活器由客户端使用来获取服务器(已创建)对象的代理。
Remoting
- 配置:远程配置用于动态地或通过使用配置文件来配置服务器和客户端。
- 通道服务:通道服务用于注册通道并将消息分派给它们。
客户端工作
当客户端调用远程对象时,会调用透明代理方法。然后,透明代理调用真实代理。真实代理负责将消息发送到通道。真实代理反过来定位消息接收器并将消息传递到接收器。消息接收器将消息发送到通道中。格式化程序格式化要在线路上传输的消息。通道负责连接到服务器上的侦听套接字并发送格式化数据。
服务器端工作
服务器通道接收格式化的消息,格式化程序取消整理消息。通道调用服务器上下文接收器(与服务器关联的消息接收器),然后调用对象上下文接收器(与对象关联的对象接收器)。最后一个对象上下文接收器调用远程对象中的方法。
什么是上下文
应用程序域可以具有不同的上下文。上下文用于将具有相似执行要求的对象分组在一起。
要将对象绑定到应用程序域,可以使用 MarshalByRefObject
。而从 MarshalByRefObject
驱动的 ContextBoundObject
将对象绑定到上下文。在上下文之外,需要代理来访问该对象。
上下文属性被分配给从 ContextBoundObject
派生的对象。可以通过实现 IContextAttribute
来创建自定义属性。
分布式应用程序组件
- 远程对象
- 客户端
- 服务器
远程对象
应该从不同系统远程调用的对象必须从 System.MarshalByRefObject
派生。
Public class Hello:System.MarchalByRefObject
{
Public Hello()
{
}
~Hello(){
}
Public string Greeting(string name)
{
}
}
使用一些端口创建 TCPServerChannel
以将其注册到通道服务。然后,使用 RegisterWellKnownServiceType
注册远程对象。
客户端
在客户端程序中,我们正在创建 TCPClientChannel
以获取用于通信的空闲端口。激活器用于返回远程对象的代理。
Public class HelloClient
{
Main()
{
ChannelServices.RegisterChannel ( new TCPClientChannel() );
Hello obj = (Hello) Activator.GetObject(type of(Hello),
“tcp://localhost:8086/Hi”);
If ( obj == null)
{}
for( int i=0; i < 5; i++) { obj.Greeting(“”);}
} // end main
} // end HelloClient Class
历史
- 2008 年 1 月 2 日:初始帖子