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的默认模式,前面几篇随笔中的示例都是这种模式,当客户端发送请求后(非异步状态下),即 ...
随机推荐
- AMQP
AMQP,即Advanced Message Queuing Protocol,一个提供统一消息服务的应用层标准高级消息队列协议,是应用层协议的一个开放标准,为面向消息的中间件设计.基于此协议的客户端 ...
- python RabbitMQ队列/redis
RabbitMQ队列 rabbitMQ是消息队列:想想之前的我们学过队列queue:threading queue(线程queue,多个线程之间进行数据交互).进程queue(父进程与子进程进行交互或 ...
- C# “快捷方式” 实现程序开机启动
添加引用: COM : Windows Script Host Object Model Name: Interop.IWshRuntimeLibrary 添加命名空间: using IWshRunt ...
- VBA的打开关闭保存另存为等事件无法正常跑的原因
打开执行的代码需要写在thisworkbook的open事件下!!!!!如下图: VBA中事件分为三种:工作簿事件,工作表事件,窗体.控件事件. 工作簿事件发生在特定的工作簿中,如Open(打开工作簿 ...
- JVM常见配置汇总
堆设置 -Xms:初始堆大小 -Xmx:最大堆大小 -XX:NewSize=n:设置年轻代大小 -XX:NewRatio=n:设置年轻代和年老代的比值.如:为3,表示年轻代与年老代比值为1:3,年轻代 ...
- 左 or 右
背景: 掌握的知识:C++.MFC.设计模式.STL,熟悉windows网络编程,了解COM组件但是不精. 近期辞职找工作,发现windows下的C++开发职位很少.linux和移动端开发职位多,但是 ...
- Arduino示例教程超声波测距实验
超声波传感器 超声波是一种超出人类听觉极限的声波即其振动频率高于20 kHz的机械波.超声波传感器在工作的时候就是将电压和超声波之间的互相转换,当超声波传感器发射超声波时,发射超声波的探头将电压转化的 ...
- javascript的类、委托、事件
javascript中的类: javascript中的类 ); p2.show(); //注:Javascript中没有真正的方法重载 看起来很简单吧 ...
- Codeforces Round #374 (div.2)遗憾题合集
C.Journey 读错题目了...不是无向图,结果建错图了(喵第4样例是变成无向就会有环的那种图) 并且这题因为要求路径点尽可能多 其实可以规约为限定路径长的拓扑排序,不一定要用最短路做 #prag ...
- HTML 事件属性
HTML 事件属性一:定义二:窗口事件 (Window Events)三:表单元素事件 (Form Element Events)四:图像事件 (Image Events) 一:定义 HTML 4 的 ...