WCF技术内幕 第2章 (1)
第2章 面向对象
2.1 快速定义面向服务
面向服务是一种分布式应用组件通过消息和契约实现松耦合的架构风格.面向服务的应用是通过契约描述它们交互中使用的信息。这些契约必须使用一种语言描述,并且它的格式能够被其他应用简单地理解,因此可以减少组件实现带来的依赖性。
2.2 理解消息
面向服务的消息也是一个抽象实体:它可以包含任何数据,可以使用许多不同的方式编码,并且可以关联到虚拟东西,甚至是其他消息。
这些与面向服务消息交互的实体成为消息参与者。
2.3 消息参与者
有三种消息参与者:初始发送者,最终接收者和中介者。
发送者是一个发起通信的实体。
中介者对发送者是不可见的,并且处于发送者和中介者之间。
最终接收者是消息期望到达的目标。
2.4 消息剖析
WCF是一个与其他系统互操作的SO平台,它发送,接收和处理SOAP消息。
WCF支持SOAP,REST和POX(朴素的旧的XML数据),目前大部分WCF应用编程接口(API)使用SOAP消息结构,也支持JSON格式。
消息头由一个或多个SOAP消息头块组成。SOAP消息头块包含可以被最终接收者和中介者使用的信息。最典型的就是这些消息头块包含描述消息体数据的信息。安全、关联和消息上下文信息都可以放到消息头部分里。
中介者也可以修改SOAP消息头块或增加一个消息头块。一个中介者不应该删除或修改消息头,除非消息是发给它的。
不能保证中介者不打开和改变SOAP消息体。使用数字签名和加密可能能保证消息从初始发送者到最终接收者的完整性。
SOAP消息是独立于传输的。
2.6 消息编码
WCF是建立在SOAP1.2(XML Infoset)上的,但是它可以同时处理SOAP1.1和SOAP1.2的消息。
WCF提供了三种编码器:文本(text)编码器,二进制(binary)编码器和MTOM(消息传输优化机制)编码器。WCF4.0里提供了一种新的编码器:字流编码器,用于满足对原始二进制数据传输的需求。
二进制编码器是最搞笑的编码器,并且只适用于WCF到WCF的通信。在WCF所有的编码器中,二进制编码器产生最小的信息。这个编码器产生一个序列化的Infoset。
MTOM消息编码的WCF消息可以发送给非WCF的应用。在运行时,MTOM编码器会为数字签名创建一个基于base64编码的符号,让原始二进制数据可以在消息里打包。
Content-Type:application/xop+xml
互操作性和二进制数据大小是选择MTOM和文本编码器的理由。
MTOM不应该使用在不包括二进制数据的消息场景里。
WCF的设计目标就是在改变消息编码的时候,不需要对应用系统做出大的改变。事实上,这使得一个服务可以与多种消息编码交互成为可能。