第10章 分发器和客户端 Dispatchers and Clients
10.1 问自己的问题
using System;
using System.ServiceModel;
using System.ServiceModel.Channels;
namespace ConsoleApplication20
{
class Program
{
static void Main(string[] args)
{
//创建绑定 B
BasicHttpBinding binding = new BasicHttpBinding();
//创建地址 A
Uri address = new Uri("http://www.andersoft.com/anders");
//构建ChannelListener堆栈
IChannelListener<IReplyChannel> listenerStack = binding.BuildChannelListener<IReplyChannel>(new BindingParameterCollection());
//打开侦听器堆栈
listenerStack.Open();
//创建通道堆栈
IReplyChannel receiveChannels = listenerStack.AcceptChannel();
//打开通道堆栈
receiveChannels.Open();
//异步接收消息
receiveChannels.BeginReceiveRequest(new AsyncCallback(ReceiveRequest), receiveChannels);
//构建通道工厂堆栈
IChannelFactory<IRequestChannel> channelFactoryStack = binding.BuildChannelFactory<IRequestChannel>(new BindingParameterCollection());
//打开通道工厂堆栈
channelFactoryStack.Open();
//从通道工厂堆栈创建通道堆栈
IRequestChannel sendChannels = channelFactoryStack.CreateChannel(new EndpointAddress(address));
//打开通道堆栈
sendChannels.Open();
//发送消息给接收者
Message replyMessage = sendChannels.Request(Message.CreateMessage(MessageVersion.Soap11WSAddressingAugust2004, "urn:SomeRequestAcion", "Hi There"));
//显示回复的消息内容
Console.WriteLine("{0}Reply Received:{1}{2}", Environment.NewLine, Environment.NewLine, replyMessage.ToString());
//清理
sendChannels.Close();
channelFactoryStack.Close();
listenerStack.Close();
}
private static void ReceiveRequest(IAsyncResult ar)
{
IReplyChannel channels = ar.AsyncState as IReplyChannel;
//获取requestContext
RequestContext context = channels.EndReceiveRequest(ar);
//显示接收消息
Console.WriteLine("{0}Request Received:{1}{2}", Environment.NewLine, Environment.NewLine, context.RequestMessage.ToString());
//创建应答消息
Message reply = Message.CreateMessage(MessageVersion.Soap11WSAddressingAugust2004, "urn:SomeReplyAction", "Hi there back");
//发送回复
context.Reply(reply);
//关闭上下文
context.Close();
//关闭通道
channels.Close();
}
}
}