WCF编解码实现

深度剖析消息编码(Encoding)实现
http://www.cnblogs.com/artech/archive/2009/08/05/1539918.html

WCF三种编码典型的方式:Binary、Text和MTOM

Binary :二进制编码、仅适用于于.NET平台之间通信 
Text:无关平台、文本编码方式 
MTOM:基于WS-MTOM规范、改善大规模二进制数据在SOAP消息的传输性能、跨平台的编码方式

WCF实现编码的核心对象:XmlDictionary、XmlDictionaryReader和XmlDIctionaryWriter。

1、XmlDictionary:

2、XmlDictionaryWriter:编码
XmlUTF8TextWriter:提供基于文本的编码实现; XmlBinaryWriter:提供基于二进制的编码实现; XmlMtomWriter:提供基于MTOM(Message Transmission Optimized Mechanism)的编码实现
XmlDictionaryWriter对应的工厂方法分别为:CreateTextWriter、CreateBinaryWriter和CreateMtomWriter
3、XmlDictionaryReader:解码 

XmlUTF8TextReader:提供基于文本的解码码实现;
XmlBinaryReader:提供基于二进制的解码码实现;
XmlMtomReader:提供基于MTOM(Message Transmission Optimized Mechanism)的解码实现
XmlDictionaryReader对应的工厂方法分别为:CreateTextReader、CreateBinaryReader和CreateMtomReader

消息编码器:通过类型MessageEncoder表示,

MessageEncoder是定义在System.ServiceModel.Channels命名空间下的一个抽象类。
MessageEncoder的两种类型的操作:读消息ReaderMessage和写消息WriteMessage

对应关系:

3种MessageEncoder:

TextMessageEncoder、BinaryMessagEncoder和MtomMessageEncoder;

3种MessageEncoderFactory:

TextMessageEncoderFactory、BinaryMessagEncoderFactory和MtomMessageEncoderFactory。

3种MessageEncodingBindingElement:

TextMessageEncodingBindingElement、BinaryMessageEncodingBindingElement和MtomMessageEncodingBindingElement。

MessageEncodingBindingElement通过CreateMessageEncoderFactory得到相应的MessageEncoderFactory。

MessageEncodingBindingElement的BuildChannelFactory/BuildChannelListener方法首先被调用-->
MessageEncodingBindingElement-->
创建相应的MessageEncoderFactory对象-->将其置于当前的BindingContext中-->
TransportBindingElement的BuildChannelFactory/BuildChannelListener方法被调用-->
并创建TransportChannelFactory/TransportChannelListener对象-->
TransportChannelListener和TransportChannelFactory创建TransportChannel用于请求监听和消息发送-->
与此同时TransportChannel会将MessageEncoderFactory从BindingContext获取下来用于消息的解码和编码。

原文地址:https://www.cnblogs.com/tranw/p/6402211.html