首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

Remoting 基本原理與擴充機制 (中-1):利用 ChannelProvider 擴充 MessageSink

     編輯:關於C語言

背景與動機

ChannelSink 僅能操作已序列化的資料流。若要攔截原始訊息物件(修改參數、回傳值、AOP),需在 Formatter 前插入 IMessageSink。

自訂 MessageSink 範例

public class CustomMessageSink : IMessageSink
{
    public IMessage SyncProcessMessage(IMessage msg)
    {
        ((IMethodMessage)msg).LogicalCallContext.SetData("MyName", "idior");
        return _nextSink.SyncProcessMessage(msg);
    }
    // 略:AsyncProcessMessage、NextSink
}

IClientChannelSinkProvider 建立 Sink

public IClientChannelSink CreateSink(IChannelSender channel, string url, object remoteChannelData) { ... }

回傳 IClientChannelSink,無法直接回傳 IMessageSink。解決:自訂 Sink 同時實作 IClientChannelSink,方法體拋 NotSupportedException。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved