channel, sink, sink chain and channel sink provider
為了擴充套件
.net remoting
,定製接收器(
sink
)和通道接受提供程式(
channel sink provider
),改變
.net remoting
的預設行為,需要先了解
.net remoting
的相關概念及其執行機制。
下面先了解一些基本概念:
通道(channel)-是跨遠端處理邊界(無論是在應用程式域、程序還是計算機之間)在應用程式之間傳輸訊息的物件。通道可以在終結點上偵聽入站訊息,向另乙個終結點傳送出站訊息,或者兩者都可以。
通道必須實現
ichannel
介面,該介面提供諸如
channelname
和channelpriority
這樣的屬性。專用於在特定埠上偵聽特定協議的通道實現
ichannelreceiver
,而專用於傳送資訊的通道實現
ichannelsender
(注:ichannelreceiver
和ichannelsender
介面都繼承
ichannel
介面)。
tcpchannel
和httpchannel
物件都實現這兩種介面,因此它們可用於傳送或接收資訊。
.net remoting framework
提供了tcpchannel
和httpchannel
兩個通道的實現。
在傳送訊息之前或接收訊息之後,通道(
channel
)沿著通道接收物件鏈(
a chain of channel sink objects
)傳送每個訊息。該接收鏈(
sink chain
)包含基本通道功能所需的接收器(sink
)(如格式化程式接收器
formattersink
、傳輸接收器
transportsink
或堆疊生成器接收器
stackbuildersink
),但是您可以自定義通道接收鏈以便用訊息或流執行特殊任務。
通道接收鏈(sink chain)處理任何傳送到應用程式域或從應用程式域傳送的訊息。此時,您只有訊息,但是您可以任意操作該訊息,而後面的處理將使用您在處理之後返回給系統的訊息。這是實現日誌記錄服務、任何種類的篩選器或者客戶端或伺服器上的加密或其他安全措施的理所當然的位置。以下插圖顯示基本通道接收鏈的結構。
每個通道接收器(channel sink)都處理流,然後將流傳遞到下乙個通道接收器,這意味著您的接收器之前或之後的物件應當知道該如何處理傳遞給它們的流。(
sink/channel sink
是同乙個描述。)
stackbuildersink
物件是伺服器上遠端物件前的最後乙個訊息接收器。
每個通道接收器(
channel sink
)或者實現
iclientchannelsink
,或者實現
iserverchannelsink
。客戶端上的第乙個通道接收器還必須實現
imessagesink
。它通常實現
iclientformattersink
(它從imessagesink
、ichannelsinkbase
和iclientchannelsink
繼承),並被稱作格式化程式接收器(
formatter sink
),因為它將傳入的訊息轉換為流(
imessage
物件)。
通道接收提供程式(channel sink provider)-(實現
iclientchannelsinkprovider
、iclientformattersinkprovider
或iserverchannelsinkprovider
介面的物件)負責建立遠端處理訊息所流過的通道接收器(
channel sink
)。當遠端型別被啟用後,將從通道(
channel
)中檢索通道接收提供程式(
channel sink provider
);然後在該接收提供程式上呼叫
createsink
方法以檢索鏈上的接收器中的第乙個
sink
。通道接收器(
channel sink
)還負責在客戶端和伺服器之間傳輸訊息。通道接收器也鏈結在一起而形成乙個鏈。當在接收提供程式上呼叫
createsink
方法時,該方法應該執行以下操作:
·建立它自己的通道接收器。
·在鏈中的下乙個接收提供程式上呼叫
createsink。·
確保下乙個接收器和當前的接收器鏈結在一起。
·將其接收器返回到呼叫方。
通道接收器負責將在它們上面進行的所有呼叫**到鏈中的下乙個接收器,並且應當提供用於儲存對下乙個接收器的引用的機制。
自定義通道接收器(custom channel sinks)
自定義通道接收器被插入到格式化程式接收器(
formattersink
)和最後乙個傳輸接收器(
transportsink
)之間的物件鏈中。
傳輸接收器(transportsink)
傳輸接收器是客戶端上的鏈中最後乙個接收器和伺服器端上的鏈中第乙個接收器。除了傳輸序列化的訊息,傳輸接收器還負責將標頭(header)傳送到伺服器並在呼叫從伺服器返回時檢索標頭和流。這些接收器內建在通道中,並且無法擴充套件。
簡要總結.net remoting infrastructure機制:
1,**物件(
proxy
)負責**對
remote objects
的呼叫。
2,訊息物件(
message objects
)用來呼叫
remote methods
的資料。
3,通道接收器(
sink/channel sink
)用來遠端方法呼叫(
remote method calls
)處理訊息。
4,通道接收提供程式(
channel sink provider
)-一般用來將接收器(
sink
)插入到通道接收鏈(
sink chain
)中。5
,格式化程式接收器
formattersink
-用來序列化
/反序列化訊息格式,進行傳遞。
6,傳輸接收器
transportsink
-用來在程序或
之間傳遞序列化的訊息。
reference:
1, msdn, .net framework
開發員指南
, 接收器和接收鏈
通道 接收器 接收鏈和通道接受提供程式
channel,sink,sink chain and channel sink provider 為了擴充套件 net remoting 定製接收器 sink 和通道接受提供程式 channel sink provider 改變 net remoting 的預設行為,需要先了解 net remot...
go指標接收器和非指標接收器
type student struct 指標接收器 func s student ageadd1 非指標接收器 func s student ageadd2 指標接收器傳入的是struct本身,非指標接收器傳入的是struct的copy副本 指標接收器可以讀寫struct中的內容,非指標接收器只能讀...
使用通道傳送和接收資料
前面已經說過通道的簡介以及具體使用,那麼通道是如何收發資料的,今天就和大家聊下。通道傳送資料的格式 通道的傳送使用特殊的操作符 將資料通過通道傳送的格式為 通道變數 值 示例 使用 make 建立乙個通道後,就可以使用 向通道傳送資料,如下 建立乙個空介面通道 ch make chan inte c...