WCF技术内幕 第3章 (2)
请求/应答消息交换模式
请求/应答和WSDL
代码里的wsdl:input和wsdl:output元素的顺序暗示了在一个应答消息发送以前,请求消息必须先被接收。
请求/应答和WCF契约
WCF操作契约默认使用请求/应答消息交换模式。任何WCF认为可序列化的类型都可以指定为一个返回类型。
//Requesterusing System;using System.ServiceModel;using System.Text;using WcfServiceApp3;namespace RequesterApp{ class Program { static void Main(string[] args) { WSHttpBinding binding = new WSHttpBinding(); binding.TextEncoding = Encoding.UTF8; binding.MessageEncoding = WSMessageEncoding.Text; EndpointAddress address=new EndpointAddress("http://localhost:9876/IActionsService"); ChannelFactory<IActionsService> channelFactory = new ChannelFactory<IActionsService>(binding, address); IActionsService service = channelFactory.CreateChannel(); Console.WriteLine("Begin send request..."); int res = service.Sum(100, 200); Console.WriteLine("Got the response..."); Console.WriteLine("Print the result:{0}", res); Console.ReadKey(); } }}
传输考虑
当WCF最初发布的时候,还没有对于使用MSMQ的请求/应答消息交换模式的直接支持,同样也不支持UDP。
当使用像TCP,HTTP或命名管道这样的传输时,接收者可以通过反向通道发送应答消息。在这些场景里,WS-addressing表示应答消息应该发送到<ReplyTo>消息头定义的地址。