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

WCF 從理論到實踐 (6):WCF 架構全景深度解析

     編輯:關於.NET

文章導讀

本文從整體架構視角重新認識 WCF,涵蓋四大核心層級(合約與描述、服務執行階段、訊息傳遞、啟動與宿主)、關鍵元素概念、訊息處理管線流程,並以最簡單 WCF 範例對應架構圖解析。適合 WCF 初學者建立整體認知框架。

核心知識點

  • WCF 四層架構模型與職責分工
  • 合約層:資料、訊息、服務合約的定位與關係
  • 執行階段行為:錯誤、節流、中繼資料、事務、調度
  • 訊息傳遞:通道堆疊、協定/傳輸/編碼通道
  • 宿主模式:自我宿主、IIS、WAS、Com+
  • 實戰範例:自訂 MessageContract 驗證 SOAP 訊息結構

一、WCF 架構四層模型

WCF 架構圖

1. Contracts and Description(合約與描述層)——「說什麼」

合約類型職責對應屬性比喻
Data Contract 定義資料交換格式(XSD) [DataContract], [DataMember] 間諜與國家約定的密碼本
Message Contract 控制 SOAP 訊息結構(Header/Body/加密簽名) [MessageContract], [MessageHeader], [MessageBodyMember] 電報報文格式規範
Service Contract 定義服務公開操作簽名 [ServiceContract], [OperationContract] 情報機關提供的聯絡管道與人員

合約層比喻圖

2. Service Runtime(服務執行階段層)——「怎麼做」

控制服務運行時行為:

  • ErrorBehavior:錯誤處理行為
  • ThrottlingBehavior:限制實例/會話/呼叫數,控制效能
  • MetadataBehavior:控制中繼資料發布方式
  • TransactionBehavior:事務行為(回滾、隔離等級)
  • DispatchBehavior:訊息調度處理(可擴展攔截器、參數檢查)

訊息處理管線流程:

WCF 訊息處理流程

  1. 傳輸通道接收位元組流
  2. 編碼器解碼為訊息
  3. 協定通道處理(安全性、可靠會話、事務流)
  4. 調度器根據 Action 分派到操作
  5. 參數檢查、實例建立、操作調用
  6. 回應訊息逆向流經管線發送

3. Messaging(訊息傳遞層)——「怎麼傳」

核心概念:通道堆疊

通道類型代表功能
協定通道WS-Security, WS-ReliableMessaging, 事務流, 編碼器訊息層級處理:安全、可靠、編碼、事務
傳輸通道HTTP, TCP, Named Pipes, MSMQ網路傳輸協定

通道堆疊示意

4. Activation and Hosting(啟動與宿主層)——「跑在哪」

  • 自我宿主:Console、WinForms、WPF、Windows Service
  • IIS / WAS:自動啟動、進程回收、健康監控
  • Com+:企業級事務、物件池

二、實戰範例:最簡 WCF 服務架構對應驗證

1. 建立專案結構

建立 WCF Application

自動產生檔案

2. 定義服務合約與資料合約

IService.cs 服務合約

3. 自訂 MessageContract 驗證 SOAP 結構

CustomMessage.cs:

自訂訊息合約

4. 服務實作與配置

IMessagingHello.cs / MessageHello.svc:

服務合約介面

服務實作

web.config:

Web.config 配置

5. 客戶端呼叫與 tcpTrace 驗證

加入服務參考

客戶端呼叫代碼

6. SOAP 訊息追蹤結果

發送訊息:

<s:Envelope xmlns:s="https://schemas.xmlsoap.org/soap/envelope/">
  <s:Body>
    <HelloGreetingMessage xmlns="https://tempuri.org/">
      <Salutations xmlns="https://jillzhang.cnblogs.com">jillzhang</Salutations>
    </HelloGreetingMessage>
  </s:Body>
</s:Envelope>

接收訊息:

<s:Envelope xmlns:s="https://schemas.xmlsoap.org/soap/envelope/">
  <s:Header>
    <h:OutOfBandData s:mustUnderstand="1" xmlns:h="https://jillzhang.cnblogs.com">Served by object 63334862.</h:OutOfBandData>
  </s:Header>
  <s:Body>
    <HelloResponseMessage xmlns="https://tempuri.org/">
      <ResponseToGreeting xmlns="https://jillzhang.cnblogs.com">Service received: jillzhang</ResponseToGreeting>
    </HelloResponseMessage>
  </s:Body>
</s:Envelope>

tcpTrace 追蹤結果

驗證結論:MessageContract 成功控制 SOAP Header/Body 結構,OutOfBandData 出現在 Header,業務資料在 Body,完全符合預期。

三、架構層級對應總結表

架構層範例對應實作關鍵技術點
合約層[ServiceContract], [DataContract], [MessageContract]定義介面、資料結構、訊息格式
執行階段web.config <serviceBehaviors>, [ServiceBehavior]InstanceContextMode, ConcurrencyMode, 事務、節流
訊息傳遞bindingConfiguration="wsHttpBinding"通道堆疊:編碼(Text) + 協定(Security/RM) + 傳輸(HTTP)
宿主層IIS (Web Site 專案)WAS 啟動、應用程式池管理

總結

WCF 架構清晰分層,各司其職:

  1. 合約層定義「說什麼」——跨平台互操作基石
  2. 執行階段控制「怎麼做」——行為豐富、可擴展
  3. 訊息層實現「怎麼傳」——通道堆疊靈活組合
  4. 宿主層決定「跑在哪」——多種部署模式無縫切換

理解四層關係,才能在架構設計、效能調優、疑難排查時游刃有餘。

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