WCF消息編碼器相關(guān)應(yīng)用代碼解讀
WCF作為一個(gè)功能強(qiáng)大的.NET Framework 3.5重要組成部件,承擔(dān)者包括通信在內(nèi)容的多項(xiàng)功能的實(shí)現(xiàn)。其中,WCF消息編碼器通過類型MessageEncoder表示,MessageEncoder是定義在System.ServiceModel.Channels命名空間下的一個(gè)抽象類。
從下面的定義中可以看出,MessageEncoder主要包含兩種類型的操作:讀消息和寫消息,分別通過ReaderMessage和WriteMessage方法實(shí)現(xiàn)。此外,兩個(gè)額外的方法,GetProperty<T>用于獲取MessageEncoder相關(guān)的一些屬性,IsContentTypeSupported用于判斷MessageEncoder是否支持某種類型的MIME類型。
- public abstract class MessageEncoder
- {
- //其他成員
- public virtual T GetProperty<T>() where T : class;
- public virtual bool IsContentTypeSupported(string contentType);
- public Message ReadMessage(ArraySegment<byte> buffer,
BufferManager bufferManager);- public Message ReadMessage(Stream stream, int maxSizeOfHeaders);
- public abstract Message ReadMessage(ArraySegment<byte> buffer,
BufferManager bufferManager, string contentType);- public abstract Message ReadMessage(Stream stream,
int maxSizeOfHeaders, string contentType);- public abstract void WriteMessage(Message message, Stream stream);
- public ArraySegment<byte> WriteMessage(Message message,
int maxMessageSize, BufferManager bufferManager);- public abstract ArraySegment<byte> WriteMessage(Message message,
int maxMessageSize, BufferManager bufferManager, int messageOffset);- public abstract string ContentType { get; }
- public abstract string MediaType { get; }
- public abstract MessageVersion MessageVersion { get; }
- }
與上面介紹的3種類型的XmlDictionaryWriter/XmlDictionaryReader相對應(yīng),WCF消息編碼器同樣定義了MessageEncoder:TextMessageEncoder、BinaryMessageEncoder和MtomMessageEncoder三種MessageEncoder,它們分別封裝了XmlUTF8TextWriter/XmlUTF8TextReader、XmlBinaryWriter/XmlBinaryReader和XmlMtomWriter/XmlMtomReader。
WCF定義了3個(gè)相應(yīng)的工廠類:TextMessageEncoderFactory、BinaryMessageEncoderFactory和MtomMessageEncoderFactory用于創(chuàng)建相應(yīng)的MessageEncoder。它們共同繼承一個(gè)抽象類:System.ServiceModel.Channels.MessageEncoderFactory。通過只讀屬性Encoder得到相應(yīng)的MessageEncoder。
- public abstract class MessageEncoderFactory
- {
- //其他成員
- public abstract MessageEncoder Encoder { get; }
- }
以上就是我們?yōu)榇蠹医榻B的WCF消息編碼器相關(guān)內(nèi)容。
【編輯推薦】