Custom Channel Sink征服之旅二

來源:互聯網
上載者:User

 

接上一篇《Custom Channel Sinks被我征服了》

.Net 的Channel Sink是一個很系統的架構,在瞭解Custom Channel Sink的原理及主要介面後,接下來的內容將討論Channel Sink相關的知識,這也算第二步吧。

在我學習的過程中,我有一個心得想和大家分享:學習的過程是一個登山的過程,你得腳踏實地,一步一步向前,如果你認為這樣的速度很慢,你想找一個“速成”的方法,那麼結果只有一個,你永遠也不能自己爬上去,因為世界上沒有這種方法。

接下來我想討論的是如何建立Channel Sink。Channel Sink分為兩種,一種在用戶端上工作,執行介面為IClientChannelSink;一種在伺服器上工作,執行介面為IServerChannelSink。在這兩個介面中,最關鍵的方法是ProcessMessage。

先看一下IClientChannelSink的ProcessMessage方法定義
void ProcessMessage(
   IMessage* msg,
   ITransportHeaders* requestHeaders,
   Stream* requestStream,
   [Out] ITransportHeaders** responseHeaders,
   [Out] Stream** responseStream
);
msg:需要處理的訊息
requestHeaders:添加到外發訊息的頭資訊,其目標是伺服器
requestStream:發送到傳輸層的位元組流
以上3個參數是傳入參數,其作用就是將用戶端的資料發往伺服器。下面兩個參數是返回參數,其作用是返回來自伺服器的響應。
responseHeaders:返回來自伺服器的頭資訊
responseStream:返回來自於傳輸層的流

再看一下IServerChannelSink的ProcessMessage方法定義
ServerProcessing ProcessMessage(
   IServerChannelSinkStack* sinkStack,
   IMessage* requestMsg,
   ITransportHeaders* requestHeaders,
   Stream* requestStream,
   [Out] IMessage** responseMsg,
   [Out] ITransportHeaders** responseHeaders,
   [Out] Stream** responseStream
);
sinkStack:被當前Channel Sink所調用的Channel Sinks棧
requestMsg:包含請求的訊息
requestHeaders:從來自於用戶端的訊息中檢索出來的頭資訊
requestStream:需要被處理然後傳輸給還原序列化Sink的流
以上3個參數為傳入參數,處理的是從用戶端發送過來的資料,以下三個參數為返回參數,處理的是伺服器的處理結果,要返回給用戶端的資料。
responseMsg:返回伺服器的回應訊息
responseHeaders:返回傳往用戶端的頭資訊
responseStream:返回傳送給傳輸Sink到用戶端的流。

從上面的分析,我們可以很直觀的發現,用戶端的ProcessMessage方法和伺服器端的ProcessMessage方法構成了一個訊息處理環。其處理順序為:用戶端調用代理對象->[用戶端的Sinks].ProcessMessage->[伺服器端的Sinks].ProcessMessage->伺服器建立堆棧處理資料->[伺服器端Sinks].ProcessMessage->[用戶端的Sinks].ProcessMessage->用戶端調用代理對象傳回值。在上面的順序表達中,用戶端和伺服器端的ProcessMessage順然都被標註了兩次,實際上他們只執行了一次,第二次標註,實際上是第一次調用的返回,其傳回值就是上面提到的out參數。

---------------------------

這一節就寫道這裡吧,還是由於工作原因,不能靜下心來寫blog,之所以寫在這裡,也是想和關注.net remoting架構的朋友交流一下,剩下的還是下周寫出來,有什麼問題,請QQ聯絡我:64528619,歡迎批評!

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.