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

WCF 訊息編碼實現深度剖析:MessageEncoder 體系與傳輸層整合機制(下)

     編輯:關於.NET

上篇介紹 XmlDictionaryWriter/Reader 為編碼核心。實際框架中透過 MessageEncoder 進一步封裝,專責訊息編解碼。

一、MessageEncoder 抽象基類

定義於 System.ServiceModel.Channels,核心操作:

  • 讀取:ReadMessage 多載(byte[]/Stream)
  • 寫入:WriteMessage 多載(Stream/byte[])
  • 屬性:ContentType、MediaType、MessageVersion
  • IsContentTypeSupported 判斷 MIME 型別支援

對應三種編碼方式,WCF 定義三對 Writer/Reader 及 Encoder/Factory:

  • Text:XmlUTF8TextWriter/Reader → TextMessageEncoder → TextMessageEncoderFactory
  • Binary:XmlBinaryWriter/Reader → BinaryMessageEncoder → BinaryMessageEncoderFactory
  • MTOM:XmlMtomWriter/Reader → MtomMessageEncoder → MtomMessageEncoderFactory

Factory 抽象基類 MessageEncoderFactory 僅暴露 Encoder 屬性。內部類型需透過反射實例化。

二、實戰演示:Text vs MTOM 編碼對比

建立含位圖的 Message,分別用 TextMessageEncoderFactory 與 MtomMessageEncoderFactory 編碼寫入檔案。結果顯示:Text 將二進位 Base64 內聯於 SOAP Body;MTOM 產生 MIME Multipart/Related XOP 封裝,SOAP Body 僅含 xop:Include 參考,二進位內容分離為附件,實現傳輸優化。

三、WCF 體系下編碼機制實現流程

客戶端調用 → ClientMessageFormatter 生成請求訊息 → 綁定層轉信道層。綁定為有序綁定元素組合,必含 MessageEncodingBindingElement 與 TransportBindingElement,共同完成編碼。

MessageEncodingBindingElement 抽象基類定義 CreateMessageEncoderFactory()。三種具體實作對應三種 Factory。建立通道堆疊時:

  1. MessageEncodingBindingElement.BuildChannelFactory/Listener 建立 MessageEncoderFactory 置入 BindingContext。
  2. TransportBindingElement 建立 TransportChannelFactory/Listener,進而建立 TransportChannel。
  3. TransportChannel 從 BindingContext 取出 MessageEncoderFactory 用於實際編解碼。

圖 1 WCF 體系下訊息編碼實現

並無專門編碼通道,編碼工作由傳輸通道內建完成。

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