wcf序列化和消息编码

来源:互联网 发布:大秦帝国 纵横 知乎 编辑:程序博客网 时间:2024/06/05 12:42

http://blog.csdn.net/yl2isoft/article/details/53287525

1、wcf松耦合的实现 
wcf是基于服务架构(soa)的一种实现,soa由若干既独立又相互关联的子系统构成,子系统之间通过服务调用来沟通,当子系统a调用子系统b提供的服务时,子系统a是client,子系统b是service。 
wcf中,使用服务契约(service contract)来实现客户端对服务的调用。可以将服务契约理解为接口,定义了服务能够提供的操作,它决定了客户端调用服务的方式,只要服务调用方式没有发生改变,不管服务怎么实现,都不影响客户端正常使用服务。将相对稳定的服务契约和service的实现隔离开来,使客户端和服务端之间具有了松耦合的特性。

2、客户端和服务端的消息交互过程 
客户端和服务端使用soap message来交换信息,客户端调用服务以及服务返回调用结果都是通过soap message来表示。客户端和服务端之间的消息交换具有不同的模式(Request/Response、 One-way、Duplex),不同的消息交换模式(mep)构成了不同的服务调用方式。 
soap message使用xml格式来表示消息,客户端使用soap message调用服务时,需要将.net对象序列化成xml数据(Serialization),为了数据能够经由网络传输,需要将xml数据转换成字节流(Encoding),到了服务端需要将字节流翻译成xml数据(Deconding),再将xml数据反序列化成.net对象(Deserialization),进行服务调用。

3、wcf序列化 
wcf使用DataContractSerializer(默认)、XMLSerializer和NetDataContractSerializer将.net对象序列化成xml。使用DataContractSerializer序列化.net对象,类型必须运用DataContractAttribute, 需要序列化的成员必须运用DataMemberAttribute。XMLSerializer是asmx采用的序列化器,使用XMLSerializer序列化.net对象,不需要使用DataContractAttribute和DataMemberAttribute。NetDataContractSerializer和DataContractSerializer基本类似,不做说明。

4、wcf编码 
WCF提供了3种典型的编码方式:Binary、Text和MTOM(Message Transmission Optimized Mechanism)。Binrary以二进制的方式进行消息的编码,能够极大地减少编码后字节的大小,但是仅限于.NET平台之间的通信。基于纯文本的编码具有平台无关性,所以Text提供平台无关的基于文本的编码方式。MTOM编码基于WS-MTOM规范,是一种跨平台的编码方式。MTOM兼具文本编码的跨平台能力,又具有Binary编码高压缩率的优势。 
wcf使用XmlDictionaryWriter将XML数据进行编码写入到流中,而XmlDictionaryReader将数据从流中读出并进行解码,生成相应的XML。XmlDictionaryWriter是一个继承自System.Xml.XmlWriter的抽象类,WCF中定义了一系列具体的XmlDictionaryWriter,它们直接或者间接地继承自XmlDictionaryWriter,为编码和解码提供了不同的实现。典型的XmlDictionaryWriter包括以下3个:XmlUTF8TextWriter提供基于文本的编码和解码实现;XmlBinaryWriter提供基于二进制的编码和解码实现;XmlMtomWriter提供基于MTOM的编码和解码实现。使用XmlDictionaryWriter中定义的工厂方法CreateTextWriter、CreateBinaryWriter和CreateMtomWriter来创建XmlUTF8TextWriter、XmlBinaryWriter和XmlMtomWriter这些对象。

5、结构图 
这里写图片描述


阅读全文
0 0