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的默认模式,前面几篇随笔中的示例都是这种模式,当客户端发送请求后(非异步状态下),即 ...
随机推荐
- spring使用elasticsearch 5.x
elasticsearch客户端选择 这里使用transport建立elasticsearch客户端 applicationContext.xml配置,属性可以采用读取属性文件的方式.参考类Prope ...
- Thinking in UML-2-建模基础
建模的问题可以分为两个: 怎么建 模是什么 怎么建:角度不同决定了建模方向不同.所以首先要决定抽象的角度即建立这个模型的目的是什么. 模是什么:人+事+物+规则 我们这样来建立模型: 问题领域 = n ...
- c++ type_info and typeid
c++ type_info and typeid typeid 关键字typeid提供了对一个对象查询类型的功能. 该关键字和dynami_cast一起提供了c++的RTTI(rumtime type ...
- Yii2.0中文开发向导——Where条件查询全解析
在Yii的Model里进行查询的时候 where是必不可少的.Where方法声明为 static where( $condition ) 其中参数 $condition类型为字符串或者数组 1.字符串 ...
- 2016年4月1日下午,《java入门123》翻开了第一页,从此走上不归路。新手初来乍到,献上见面礼
package copyfile; import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream ...
- C# property简介
property专属的关键字就只有value.其他的性质实现都是用其他的方法的组合.property通过对一系列方法的灵活组合应用,能够间接地对私有的成员变量进行赋值操作和得到值.因为是间接地,私有变 ...
- 【笔记】after,before,insertAfter,insertBefore的作用
这几个方法的作用是插入外部节点,所谓外部插入节点就是我们平常在网页编程中手动添加代码到某一句语句的前面或后面,如图: 红色框的P是在蓝色框span的前面插入的外部节点,反过来说蓝色框的span是在红色 ...
- HTML5 UI框架Kendo UI Web中如何实现Grid网格控件本地化
Kendo UI Web包含数百个创建HTML5 web app的必备元素,包括UI组件.数据源.验证.一个MVVM框架.主题.模板等. 为了使得产品可以符合不同市场的本地化需求和语言,Kendo U ...
- mysql出现“SELECT list is not in GROUP BY clause and contains nonaggregated column [duplicate]”错误提示
项目跨平台时由于mysql设置的问题,原代码运行出现这个错误,此时把mysql设置改下就好了 sql_mode='NO_ENGINE_SUBSTITUTION'
- 修改 MyEclipse 中的 jsp 和 servlet 模板
找到 MyEclipse/Common/plugins/com.genuitec.eclipse.wizards_9.0.0.me201211011550.jar 这个文件(wizards后面的数字 ...