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

Remoting 基本原理與擴充機制 (中-2):Pipeline 概念與 ChannelSink 鏈建立

     編輯:關於C語言

Pipeline 抽象概念

Pipeline 非單一物件,而是從 RealProxy 到 StackBuildSink 經過的所有 Sink 集合。RealProxy._identity 維護 IClientChannelSink 鏈表(透過 Next 屬性串接),僅為 Pipeline 的一部分。

ChannelSink 鏈結構圖

ChannelSink 鏈結構

InternalInvoke 完整程式碼

呼叫堆疊

internal virtual IMessage InternalInvoke(IMethodCallMessage reqMcmMsg, bool useDispatchMessage, int callType)
{
    if (identity.ChannelSink == null)
    {
        IMessageSink envoySink = null, channelSink = null;
        if (!identity.ObjectRef.IsObjRefLite())
            RemotingServices.CreateEnvoyAndChannelSinks(null, identity.ObjectRef, out envoySink, out channelSink);
        else
            RemotingServices.CreateEnvoyAndChannelSinks(identity.ObjURI, null, out envoySink, out channelSink);
        RemotingServices.SetEnvoyAndChannelSinks(identity, envoySink, channelSink);
        if (identity.ChannelSink == null) throw new RemotingException("...");
    }
    // ...
}

自訂 MessageSink 插入策略

讓自訂 Sink 同時實作 IClientChannelSink(方法拋例外),即可透過 IClientChannelSinkProvider 建立並插入 Pipeline。

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