.NET Remoting 体系结构 之 消息接收器

Activator.GetObject()方法调用 RemotingServices.Connect()方法连接已知对象。在 Connect()方法中,Unmarshal()方法不但在创建代理时发生,也在创建特使接收器时发生。代理使用一个特使接收器链把消息传递到信道中。所有接收器都是侦听器,它们可以更改消息,执行一些额外的操作,如创建锁、写事件以及执行安全检查等。所有消息接收器都实现 IMessageSink 接口,这个接口定义一个属性和两个方法:

●  NextSink
属性——接收器使用这个属性到达下一个接收器,并向前传递消息。

● SyncProcessMessage()方法 ——对于同步消息,前面的接收器或远程基础结构调用这个方法, 它的 IMessage 参数用于发送消息和返回消息。

● syncProcessMessage()方法 ——对于异步消息,接收器链中前面的接收器或远程基础结构 调用这个方法。该方法有两个参数:消息和接收回应的消息接收器。 下面几节讨论可以使用的 3 个不同的消息接收器

1. 特使接收器

通过 IEnvoyInfo 接口,可以到达特使接收器链。编组对象引用 ObjRef 有一个 EnvoyInfo 属性, 该属性返回 IEnvoyInfo 接口。特使列表从服务器上下文中创建,因此,服务器可以把一些功能注入 客户端。特使可以收集客户端的身份信息,并把这些信息传递给服务器。

2. 服务器上下文接收器

在信道的服务器端接收消息时,消息就传递给服务器上下文接收器。服务器上下文接收器链中 的后一个接收器把消息传递到对象接收器链中。

3. 对象接收器

对象接收器与某个具体的对象关联。如果对象类定义特定上下文特性,就为该对象创建上下文 接收器。

原文地址:https://www.cnblogs.com/WangJinYang/p/2892760.html