.NET Remoting 深入解析:消息接收器、对象传递与生命周期管理
1. 消息接收器(Message Sinks)
在 .NET Remoting 中, Activator.GetObject()
方法会调用 RemotingServices.Connect()
来连接到知名对象。在 Connect()
方法里,会执行 Unmarshal()
操作,此过程不仅会创建代理,还会创建特使接收器(envoy sinks)。代理借助一系列特使接收器将消息传递到通道。所有的接收器都是拦截器,它们能够改变消息并执行一些额外的操作,比如创建锁、记录事件、进行安全检查等。
所有消息接收器都实现了 IMessageSink
接口。该接口定义了一个属性和两个方法:
- NextSink 属性 :接收器利用此属性获取下一个接收器并传递消息。
- SyncProcessMessage() 方法 :对于同步消息,该方法由前一个接收器或远程处理基础结构调用。它有一个 IMessage
参数,用于发送和返回消息。
- AsyncProcessMessage() 方法 :对于异步消息,该方法由链中的前一个接收器或远程处理基础结构调用。它有两个参数:一个消息和一个接收回复的消息接收器。
以下是三种不同的消息接收器:
- 特使接收器(Envoy sink)