心海巨澜

天行键,君子以自强不息;地势坤,君子以厚德载物!

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

      WCF的消息交换模式指Message Exchange Patterns,主要分为:请求(Request)/应答(Reply)、单向(One Way)、双向(Duplex)或者回调(Callback);

      本章主要介绍请求(Request)/应答(Reply)操作,请求/应答操作是所有服务操作的缺省行为;通过查看WSDL描述,我们可以看到<wsdl:input>与<wsdl:output>消息的描述信息;该消息能够包含请求参数,返回数据,<body>元素,或者返回的SOAP错误等。

      在请求/应答操作中,客户端以消息形式发出请求,它会阻塞客户端直到收到应答消息。应答的默认超时值为1分钟,如果超过这一时间服务仍然没有应答,客户端就会获得一个TimeOutException异常。请求/应答与经典的客户端/服务端编程模型相似,返回的应答消息包括了返回的结果,或者它会将返回值转换为一般方法的返回值。此外,如果存在通信异常或服务端异常,代理在客户端抛出一个异常。除了NetPeerTcpBinding和NetMsmqBinding绑定,所有的绑定均支持请求/应答操作。

      请求/应答的操作模式如下图:

      下面我们通过一个DEMO来介绍请求/应答操作:

      主要代码如下:

      接口代码:

[ServiceContract(Namespace = "http://schemas.xinhaijulan.com/demos/RequestReply")]
public interface IHelloWCF
{
[OperationContract(Name
= "GetMessageContract", Action = "urn:AcionInput", ReplyAction = "urn:ActionOutput")]
string GetMessage(string msg);
}

      实现类代码:

 

public class HelloWCF : IHelloWCF
{
public string GetMessage(string msg)
{
return "Message from client is:" + msg;
}
}

      服务端代码:

static void Main(string[] args)
{
using (ServiceHost host = new ServiceHost(typeof(ServiceLibrary.HelloWCF)))
{
host.AddServiceEndpoint(
typeof(ServiceLibrary.IHelloWCF), new NetTcpBinding(), "net.tcp://localhost:9000/HelloWCF");
host.Open();
Console.WriteLine(
"Please input exit to close host.");
string key = Console.ReadLine();
while (key.ToLower() != "exit")
{
Console.WriteLine(
"Please input exit to close host.");
key
= Console.ReadLine();
}
}
}

      客户端代码:

static void Main(string[] args)
{
ChannelFactory
<ServiceLibrary.IHelloWCF> channelFactory = new ChannelFactory<ServiceLibrary.IHelloWCF>(new NetTcpBinding());
ServiceLibrary.IHelloWCF client
= channelFactory.CreateChannel(new EndpointAddress("net.tcp://localhost:9000/HelloWCF"));


using (client as IDisposable)
{
Console.WriteLine(
"------------Begin-------------");

Console.WriteLine(client.GetMessage(
"Hello WCF!"));

Console.WriteLine(
"------------End---------------");
}

Console.ReadLine();
}

 

      运行代码,输出如下:

------------Begin-------------
Message from client
is:Hello WCF!
------------End---------------

      至此,消息交换模式(MEP)-请求/应答操作介绍完毕。

      点击下载DEMO

作者:心海巨澜
出处:http://xinhaijulan.cnblogs.com

版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
posted on 2010-12-19 17:48  心海巨澜  阅读(1998)  评论(2编辑  收藏  举报