ChannelSink 僅能操作已序列化的資料流。若要攔截原始訊息物件(修改參數、回傳值、AOP),需在 Formatter 前插入 IMessageSink。
public class CustomMessageSink : IMessageSink
{
public IMessage SyncProcessMessage(IMessage msg)
{
((IMethodMessage)msg).LogicalCallContext.SetData("MyName", "idior");
return _nextSink.SyncProcessMessage(msg);
}
// 略:AsyncProcessMessage、NextSink
}
public IClientChannelSink CreateSink(IChannelSender channel, string url, object remoteChannelData) { ... }
回傳 IClientChannelSink,無法直接回傳 IMessageSink。解決:自訂 Sink 同時實作 IClientChannelSink,方法體拋 NotSupportedException。