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

WCF 專題系列(八):深度通道程式模型 Part 1 — 設計篇

     編輯:關於.NET

引言

WCF 本質是通訊服務框架,支援多種傳輸協定、訊息編碼、WS-* 規範,所有細節由通道堆疊處理。為簡化開發,WCF 提供兩層模型:應用程式程式模型(面向開發者)與通道模型(底層通訊)。掌握通道模型能深入理解 WCF 架構,構建更健壯服務或擴展框架。

通道模型概觀

通道堆疊為分層通訊堆疊,底層傳輸通道適配底層傳輸(HTTP、TCP、Named Pipe 等),上層協定通道處理安全性、可靠性、交易等。訊息以 Message 物件流經各通道:

通道堆疊架構

通道物件模型三大核心介面

  • IChannel:所有通道基底,提供 GetProperty<T>() 存取堆疊功能
  • IChannelListener:接收端,監聽傳入訊息並建立通道向上傳遞
  • IChannelFactory:發送端,建立通道處理向下發送

所有通訊物件實作 ICommunicationObject 定義狀態機:

public interface ICommunicationObject
{
    CommunicationState State { get; }
    event EventHandler Closed, Closing, Faulted, Opened, Opening;
    void Abort(); void Close(); void Close(TimeSpan timeout);
    void Open(); void Open(TimeSpan timeout);
    IAsyncResult BeginClose(AsyncCallback cb, object state);
    IAsyncResult BeginOpen(AsyncCallback cb, object state);
    void EndClose(IAsyncResult result); void EndOpen(IAsyncResult result);
}

通道物件模型

狀態機流轉

Created → Opening → Opened → Closing → Closed。發生不可復原錯誤轉 Faulted → Closed。狀態單向流轉,不可逆:

狀態機

五種通道型別

擴展 IChannel 的五種形狀對應訊息交換模式:

  1. IInputChannel:接收訊息(Datagram)
  2. IOutputChannel:發送訊息(Datagram)
  3. IRequestChannel:發送請求(Request-Reply)
  4. IReplyChannel:發送回覆(Request-Reply)
  5. IDuplexChannel:雙向通訊(Duplex)= IInputChannel + IOutputChannel

通道型別繼承

訊息交換模式對應

服務端:通道監聽器

IChannelListener 由 Binding 建立,負責建立通道接收訊息並向上傳遞。內建對應各協定的 Listener(TransactionChannelListener、TcpChannelListener 等):

服務端通道監聽器

客戶端:通道工廠

IChannelFactory 建立通道處理向下發送。內建對應各協定的 Factory(TcpChannelFactory 等):

客戶端通道工廠

基類輔助 vs 通道模型核心

WCF 提供 CommunicationObject、ChannelFactoryBase 等基類簡化自訂實作,但它們不屬於通道模型核心介面,僅為實作輔助。

總結

本文系統闡述 WCF 通道程式模型核心架構:通道堆疊、三大介面、狀態機、五種通道型別、監聽器/工廠分工。下篇將以實例深化理解。

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