博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
WCF初探-4:WCF消息交换模式之请求与答复模式
阅读量:5336 次
发布时间:2019-06-15

本文共 2549 字,大约阅读时间需要 8 分钟。

请求与答复模式( Request/Reply)

 

这种交换模式是使用最多的一中,它有如下特征:

  • 调用服务方法后需要等待服务的消息返回,即便该方法返回 void 类型
  • 相比Duplex来讲,这种模式强调的是客户端的被动接受,也就是说客户端接受到响应后,消息交换就结束了。
  • 在这种模式下,服务端永远是服务端,客户端就是客户端,职责分明。
  • 它是缺省的消息交换模式,设置OperationContract便可以设置为此种消息交换模式

接下来我们通过实例来演示一下,参照中的例子,我们将代码稍微做一下修改,将总个解决法案的OneWay全部替换为ReqReply,替换后稍作修改,下面是各个类和接口的代码片段

服务接口IReqReply.cs代码如下:

using System.ServiceModel; namespace Service{    [ServiceContract]    public interface IReqReply    {        [OperationContract]        string SayHello(string name);    }}

服务实现ReqReply.cs代码如下:

using System;using System.Collections.Generic;using System.Linq;using System.Text; namespace Service{    public class ReqReply:IReqReply    {        public string SayHello(string name)        {           System.Threading.Thread.Sleep(10000);            return "Hello "+name;        }    }}

Host类库中的配置App.config代码如下:

Host类库中的配置Program.cs代码如下:

using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.ServiceModel;using Service; namespace Host{    class Program    {        static void Main(string[] args)        {            using (ServiceHost ReqReplyHost =new ServiceHost(typeof(ReqReply)))            {                ReqReplyHost.Opened += delegate                {                    Console.WriteLine("请求响应通讯服务已经启动,按任意键终止!");                };                 ReqReplyHost.Open();                Console.Read();            }        }    }}

整个解决方案工程结构没有变化,只是服务方法做了修改,通过休眠线程的时间和返回值来观察客户端对服务端调用的变化。编译程序后,我们运行Host.exe寄宿程序寄宿该服务。添加客户端的服务引用:

 

然后在客户端控制台程序Program.cs中添加如下代码:

using System;using System.Collections.Generic;using System.Linq;using System.Text;using Client.ReqReplyServiceRef; namespace Client{    class Program    {        static void Main(string[] args)        {           Console.WriteLine("****************请求响应通讯服务示例*******************");            ReqReplyClient proxy = newReqReplyClient();            Console.WriteLine("方法调用前时间:"+ System.DateTime.Now);           Console.WriteLine(proxy.SayHello("WCF"));           Console.WriteLine("方法调用后时间:" + System.DateTime.Now);            Console.Read();        }    }}

编译后运行Client.exe程序可以看到以下结果:

 

我们可以看到服务器响应的时间刚好为10s,正好是线程休眠的时间,并且客户端返回了信息Hello WCF ,如果想要观察消息的变化,请参照中的WCF客户端测试程序使用方法,观察消息的变化。

转载于:https://www.cnblogs.com/wangweimutou/p/4086614.html

你可能感兴趣的文章
Code Snippet
查看>>
Node.js Express项目搭建
查看>>
zoj 1232 Adventure of Super Mario
查看>>
1201 网页基础--JavaScript(DOM)
查看>>
组合数学 UVa 11538 Chess Queen
查看>>
oracle job
查看>>
Redis常用命令
查看>>
XML学习笔记(二)-- DTD格式规范
查看>>
IOS开发学习笔记026-UITableView的使用
查看>>
[转载]电脑小绝技
查看>>
windos系统定时执行批处理文件(bat文件)
查看>>
thinkphp如何实现伪静态
查看>>
BZOJ 2243: [SDOI2011]染色( 树链剖分 )
查看>>
BZOJ 1925: [Sdoi2010]地精部落( dp )
查看>>
c++中的string常用函数用法总结!
查看>>
界面交互之支付宝生活圈pk微信朋友圈
查看>>
[DLX精确覆盖+打表] hdu 2518 Dominoes
查看>>
SuperMap iServerJava 6R扩展领域开发及压力测试---判断点在那个面内(1)
查看>>
Week03-面向对象入门
查看>>
一个控制台程序,模拟机器人对话
查看>>