wcf客户端调用服务端服务,使用soap message进行交互,这个消息交互过程称为消息交换(Message Exchange)。wcf支持3种不同的消息交换模式Message Exchange Pattern(MEP):(Request/Reply),Request/Forget(One-way)和Duplex。这些消息交换模式需要底层传输协议的支持,wcf使用以下4个传输协议:Http,TCP,Named Pipe,MSMQ。不同的协议对不同的消息交换模式的支持也不一样,所以在采用不同的消息交换模式时,需要选择合适的底层传输协议。
下面以HTTP和TCP协议对Duplex模式的支持进行说明。HTTP协议是应用层协议,它的主要特征是无连接和无状态,每一次http连接包括请求和回复,客户端发送请求到服务端,服务端处理完请求返回到客户端后,连接便关闭。新的http请求需要建立新的http连接。后一次连接无法获取前一次连接的状态。asp.net应用会在服务端保存连接状态来实现对session的支持,wcf则将session关联到某个实例上来实现session的管理。
所以wcf中绑定选择HTTP协议时,Duplex管道则是由两个Request/Reply Channel组成的。客户端调用服务端服务时,建立http连接。服务端返回结果给客户端时需要重新建立http连接。
TCP协议是传输层协议,它的主要特征是可靠连接。所以采用tcp协议时,天然支持Duplex消息交换模式,Client调用Service,Service回调Client使用的都是同一个连接、同一个管道。所以基于TCP的Duplex才是真正意义上的Duplex。