深度剖析消息编码(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获取下来用于消息的解码和编码。