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

WCF 技術內幕(34):通道——通道介面與基礎類型完整指南

     編輯:關於.NET

IChannel:通道層查詢的入口

所有通道與通道工廠必須實作 IChannel(繼承 ICommunicationObject)。核心方法 GetProperty<T>():堆疊頂端通道可被直接呼叫,內部通道透過委派鏈查詢特定能力(如 MessageVersion、安全功能、通道形狀)。若無法回應,委派給下一個通道;最底層回傳 null 而非拋出異常。

資料報通道介面

IOutputChannel(發送端)

  • 繼承 IChannel、ICommunicationObject
  • 同步/非同步 Send 方法
  • RemoteAddress:訊息邏輯目的地(不一定是實際位址)
  • Via:實際傳輸目標位址

IInputChannel(接收端)

  • 三組接收方法:Receive(超時拋異常)、TryReceive(布林回傳 + out 參數)、WaitForMessage(僅檢查是否有訊息,類 Peek)
  • 皆有同步/非同步版本
  • LocalAddress:本地端位址
  • WaitForMessage 可在交易範圍外檢查訊息到達,避免不必要的交易啟動/中止

請求/回覆通道介面

IRequestChannel(發送端)

  • Request 方法:發送訊息並同步/非同步等待回覆
  • RemoteAddress、Via 同資料報

IReplyChannel(接收端)

  • 回傳 RequestContext 而非直接回傳 Message
  • 方法分組:ReceiveRequest、TryReceiveRequest、WaitForRequest
  • LocalAddress 屬性

RequestContext:請求/回覆關聯的核心

  • 抽象類別,實作 IDisposable
  • 屬性 RequestMessage 取得請求訊息
  • Reply 同步/非同步發送回覆
  • 因 Message 包含 Stream 需釋放,故實作 Dispose 呼叫 Message.Dispose

雙工通道介面

IDuplexChannel

繼承 IInputChannel、IOutputChannel、IChannel、ICommunicationObject。成員為兩者合併。發送者/接收者實作相同介面,由誰發起通訊區分角色(類比撥電話者)。

逾時與基底類別

IDefaultCommunicationTimeouts

定義四大逾時:CloseTimeout、OpenTimeout、ReceiveTimeout、SendTimeout。Binding、通道工廠、通道皆實作,透過建構鏈傳遞逾時設定至通道層。

ChannelBase

所有自訂通道基類,繼承 CommunicationObject、實作 IChannel、ICommunicationObject、IDefaultCommunicationTimeouts。建構子接收 ChannelManagerBase(工廠參考)。明確實作介面逾時屬性委派給 DefaultXxxTimeout,後者從工廠取值。

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