zoukankan      html  css  js  c++  java
  • 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获取下来用于消息的解码和编码。

  • 相关阅读:
    加入mapstruct后出现 找不到符号 符号: 方法 setXX 的解决方法
    解决docker容器日志导致主机磁盘空间满了的情况
    prometheus安装(docker)
    在Github或Gitee上用hexo搭建个人博客
    解决github打不开
    jenkins更新为国内源
    让sentinel-dashboard的流控配置持久化到nacos
    Yarn和Zookeeper的区别
    flink安装启动(docker)
    jQuery 事件源码定位
  • 原文地址:https://www.cnblogs.com/tranw/p/6402211.html
Copyright © 2011-2022 走看看