所有通道與工廠實作 ICommunicationObject,定義:
Created、Opening、Opened、Closing、Closed、FaultedTimeSpan 逾時)StateOpening、Opened、Closing、Closed、Faulted抽象類別實作介面,確保行為一致性。關鍵機制:
OnOpening、OnOpened、OnClosing、OnClosed、OnFaulted:衍生類別可覆寫,**必須呼叫基類實作**以觸發事件OnOpen、OnBeginOpen、OnEndOpen、OnClose、OnBeginClose、OnEndClose、OnAbort:衍生類別**必須實作**,放置初始化/清理邏輯DefaultOpenTimeout、DefaultCloseTimeout:無參數方法使用的預設逾時Created 拋異常(Opened/Opening 拋 InvalidOperationException,Closed/Closing 拋 ObjectDisposedException),執行緒安全OpeningOnOpening → 觸發 Opening 事件OnOpen(衍生類別初始化邏輯)OnOpened → 狀態 → Opened → 觸發 Opened 事件類似流程:OnClosing → 事件 → OnClose → OnClosed → 狀態 → Closed → 事件。Close 為優雅關閉,可執行 I/O(如 WS-RM 發送 TerminateSequence)。
立即關閉,最小 I/O。流程:OnClosing → OnAbort → OnClosed。共享 Closing/Closed 事件。無非同步版本,不接受逾時參數。
| State | Close | Abort |
|---|---|---|
| Created | 呼叫 Abort | 正常中止 |
| Opening | 呼叫 Abort | 正常中止 |
| Opened | 正常關閉 | 正常中止 |
| Closing | 無操作 | 正常中止 |
| Closed | 無操作 | 無操作 |
受保護方法,供衍生類別內部錯誤時呼叫。狀態 → Faulted → 呼叫 OnFaulted(通常再呼叫 Abort)。外部不可見。
通道堆疊中,頂層通道負責同步轉換內層通道狀態。OnOpen 中呼叫 _inner.Open(timeout),通常在方法結束前調用,可適當減少傳遞的逾時值。同步機制確保整個堆疊狀態一致。