所有通道與通道工廠必須實作 IChannel(繼承 ICommunicationObject)。核心方法 GetProperty<T>():堆疊頂端通道可被直接呼叫,內部通道透過委派鏈查詢特定能力(如 MessageVersion、安全功能、通道形狀)。若無法回應,委派給下一個通道;最底層回傳 null 而非拋出異常。
IChannel、ICommunicationObjectSend 方法RemoteAddress:訊息邏輯目的地(不一定是實際位址)Via:實際傳輸目標位址Receive(超時拋異常)、TryReceive(布林回傳 + out 參數)、WaitForMessage(僅檢查是否有訊息,類 Peek)LocalAddress:本地端位址WaitForMessage 可在交易範圍外檢查訊息到達,避免不必要的交易啟動/中止Request 方法:發送訊息並同步/非同步等待回覆RemoteAddress、Via 同資料報RequestContext 而非直接回傳 MessageReceiveRequest、TryReceiveRequest、WaitForRequestLocalAddress 屬性IDisposableRequestMessage 取得請求訊息Reply 同步/非同步發送回覆Message 包含 Stream 需釋放,故實作 Dispose 呼叫 Message.Dispose繼承 IInputChannel、IOutputChannel、IChannel、ICommunicationObject。成員為兩者合併。發送者/接收者實作相同介面,由誰發起通訊區分角色(類比撥電話者)。
定義四大逾時:CloseTimeout、OpenTimeout、ReceiveTimeout、SendTimeout。Binding、通道工廠、通道皆實作,透過建構鏈傳遞逾時設定至通道層。
所有自訂通道基類,繼承 CommunicationObject、實作 IChannel、ICommunicationObject、IDefaultCommunicationTimeouts。建構子接收 ChannelManagerBase(工廠參考)。明確實作介面逾時屬性委派給 DefaultXxxTimeout,後者從工廠取值。