WCF初探-3:WCF消息交换模式之单向模式
单向模式(One-Way Calls):
- 在这种交换模式中,存在着如下的特征:
- 只有客户端发起请求,服务端并不会对请求进行回复
- 不能包含ref或者out类型的参数
- 没有返回值,返回类型只能为void
- 通过设置OperationContract的IsOneWay=True可以将满足要求的方法设置为这种消息交换模式
接下来,我们通过实例来演示这种模式,首先新建一个WcfDemo1的解决方案,添加名称为Service的类库项目作为服务端,新建IOneWay接口和 OneWay类,由于单向模式中服务端并不会有返回操作,所以我们可以用线程时间来模拟客户端对服务端的调用情况。总个工程的结构如下:

服务契约接口中的代码如下:
using System.ServiceModel; namespace Service
{
[ServiceContract]
public interface IOneWay
{
[OperationContract(IsOneWay=true)]
void SayHello(string name);
}
}
服务契约的实现代码如下:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text; namespace Service
{
public class OneWay:IOneWay
{
public void SayHello(string name)
{
System.Threading.Thread.Sleep();
}
}
}
接下来我们将服务寄宿起来,Host中的配置文件代码如下:
<?xmlversion="1.0"?>
<configuration>
<system.serviceModel>
<services>
<servicename="Service.OneWay"behaviorConfiguration="OneWayBehavior">
<host>
<baseAddresses>
<addbaseAddress="http://127.0.0.1:1234/OneWay/"/>
</baseAddresses>
</host> <endpoint address=""binding="wsHttpBinding" contract="Service.IOneWay"/>
<endpoint address="mex"binding="mexHttpBinding" contract="IMetadataExchange"/>
</service>
</services> <behaviors>
<serviceBehaviors>
<behaviorname="OneWayBehavior">
<serviceMetadatahttpGetEnabled="True"/>
<serviceDebugincludeExceptionDetailInFaults="True"/>
</behavior>
</serviceBehaviors>
</behaviors>
</system.serviceModel> </configuration>
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 oneWayHost = newServiceHost(typeof(OneWay)))
{
oneWayHost.Opened += delegate
{
Console.WriteLine("单向通讯服务已经启动,按任意键终止!");
}; oneWayHost.Open();
Console.Read();
}
}
}
}
到此,我们完成了对服务的寄宿,启动Host.exe,在浏览器中输入http://127.0.0.1:1234/OneWay/我们可以看到寄宿成功的页面。在客户端添加服务引用:

引用后在客户端程序添加以下代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Client.OneWayServiceRef; namespace Client
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("****************单向通讯服务示例*******************");
OneWayClient proxy = newOneWayClient();
Console.WriteLine("方法调用前时间:"+ System.DateTime.Now);
proxy.SayHello("WCF");
Console.WriteLine("方法调用后时间:" + System.DateTime.Now);
Console.Read();
}
}
}
生成后运行程序Client.exe,可以看到以下效果:

我们发现前后两次的时间相同,虽然服务器方法的时间进程暂停了10s,但客户端的表现出的只是单向的,并没有等待服务器的时间,也就是服务器并没有像客户端发送响应的消息。
以上是我们程序表现出来的结果。接下来,我们通过消息层面说明这个。启动vs自带的WCF客户端验证程序,在开始菜单中找到如下图所示的工具:

点击启动该命令行,输入wcftestclient,回车,启动WCF客户端测试程序:

在客户端测试程序中添加服务地址:

点击对应的方法,点击调用按钮,最后我们发现服务器给出了一条提示:

点击左下角的xml我们可以看到发送的具体消息:

我们发现只有请求消息,没有返回的消息,说明服务器并没有对此作出任何反应。
本文通过程序实例和消息层面说明消息交换模式中的单向模式,在接下来的文章中,我将继续演示消息交换中另外两只模式:请求/答复(Request/Reply) 、双工(Duplex)。
WCF初探-3:WCF消息交换模式之单向模式的更多相关文章
- WCF学习笔记之消息交换模式
在WCF通信中,有三种消息交换模式,OneWay(单向模式), Request/Reponse(请求回复模式), Duplex(双工通信模式)这三种通信方式.下面对这三种消息交换模式进行讲解. 1. ...
- WCF系列教程之消息交换模式之请求与答复模式(Request/Reply)
1.使用WCF请求与答复模式须知 (1).客户端调用WCF服务端需要等待服务端的返回,即使返回类型是void (2).相比Duplex来讲,这种模式强调的是客户端的被动接受,也就是说客户端接受到响应后 ...
- WCF学习之旅—请求与答复模式和单向模式(十九)
一.概述 WCF在通信过程中有三种模式:请求与答复.单向.双工通信.以下我们一一介绍. 二.请求与答复模式 客户端发送请求,然后一直等待服务端的响应(异步调用除外),期间处于假死状态,直到服务端有了答 ...
- WCF初探-4:WCF消息交换模式之请求与答复模式
请求与答复模式( Request/Reply) 这种交换模式是使用最多的一中,它有如下特征: 调用服务方法后需要等待服务的消息返回,即便该方法返回 void 类型 相比Duplex来讲,这种模式强调的 ...
- WCF消息交换模式之双工通讯(Duplex)
WCF消息交换模式之双工通讯(Duplex) 双工通讯Duplex具有以下特点: 1它可以在处理完请求之后,通过请求客户端中的回调进行响应操作 2.消息交换过程中,服务端和客户端角色会发生调换 3.服 ...
- WCF把书读薄(2)——消息交换、服务实例、会话与并发
上一篇:WCF把书读薄(1)——终结点与服务寄宿 八.消息交换模式 WCF服务的实现是基于消息交换的,消息交换模式一共有三种:请求回复模式.单向模式与双工模式. 请求回复模式很好理解,比如int Ad ...
- WCF初探文章列表
WCF初探-1:认识WCF WCF初探-6:WCF服务配置 WCF初探-2:手动实现WCF程序 WCF初探-7:WCF服务配置工具使用 WCF初探-3:WCF消息交换模式之单向模式 WCF初探-8:W ...
- WCF初探-15:WCF操作协定
前言: 在前面的文章中,我们定义服务协定时,在它的操作方法上都会加上OperationContract特性,此特性属于OperationContractAttribute 类,将OperationCo ...
- WCF入门四[WCF的通信模式]
一.概述 WCF的通信模式有三种:请求/响应模式.单向模式和双工通信. 二.请求/响应模式 请求/响应模式就是WCF的默认模式,前面几篇随笔中的示例都是这种模式,当客户端发送请求后(非异步状态下),即 ...
随机推荐
- box-flex不均分问题
解决box-flex不均等分的问题 我想当你上手css3的时候后一定为他的强大而感到震惊,但是震惊之后带来的一定是苦恼,因为他太TM变态了! 我之所以这么说是因为我今天写box-flex的时候遇到了一 ...
- SQL2005中的事务与锁定(九)- 转载
------------------------------------------------------------------------ -- Author : HappyFlyStone - ...
- IE8 下 select option 内容过长 , 展开时信息显示不全解决办法
IE8 下 select option 内容过长 , 展开时信息显示不全 , 简单折衷的方式就是给 option 加上 title 属性 , 但是又不想一个个的修改,怎么办呢,代码如下 : //sel ...
- Dynamics AX 2012 R2 IIS WebSite Unauthorized 401
今天,Reinhard部署好Aif Customer Service ,打开http://host:port/MicrosoftDynamicsAXAif60/,发现提示以下错误: 401 - Una ...
- [课程设计]Scrum 2.3 多鱼点餐系统开发进度 (订单一览设计)
Scrum 2.3 多鱼点餐系统开发进度 (订单一览设计) 1.团队名称:重案组 2.团队目标:长期经营,积累客户充分准备,伺机而行 3.团队口号:矢志不渝,追求完美 4.团队选题:餐厅到店点餐系统 ...
- Linux系统软件
ubuntu系统镜像文件: http://pan.baidu.com/s/1jGGgszO 虚拟机: http://pan.baidu.com/s/1hqrhQQg
- 【web必知必会】——图解HTTP(上)
本篇总结关于http的相关知识,主要内容参考如下导图: 主要讲解的内容有: 1 URL与URI的区别. 2 请求报文与相应报文的内容. 3 GET与POST的区别. 4 http的cookie.持久化 ...
- Auty自动化测试框架第七篇——添加动作库和常量文件库
[本文出自天外归云的博客园] 添加动作库 因为有很多调用的action类如果一直保存在utils中会让utils库不可维护,所以规定utils库中只放和框架本身有关的工具类,和脚本内容相关的工具类都放 ...
- spark统计
http://www.myexception.cn/sql/2004512.html http://blog.csdn.net/ssw_1990/article/details/52220466 ht ...
- Cmap的使用
1.定义 template <class KEY,class ARG_KEY,class VALUE, class ARG_VALUE> class CMap:public CObject ...