04 WCF通信模式

WCF的通信模式有三种

【1】请求响应模式:

  只能是客户端调用服务器;

  客户端请求并等待服务器的响应后才继续执行后续操作(异步调用除外)

【2】单工模式:

  只能是客户端调用服务器。

  服务器端不响应响应

【3】双工模式:

  客户端和服务器能相互调用,

   客户端得实现一个接口的类用于服务端调用。

客户端不用等待服务端响应就可以继续执行后续操作;

服务端自动调用在客户端中的接口实现类的方法。

请求响应模式

  默认就是请求响应模式,特点是客户端必须等待服务器端的响应后才能继续进行下一步的操作。

  实现方式:

第一步:服务接口

   [ServiceContract]
public interface IService1
{
[OperationContract]
string GetRequesAndReponseModeMessage();

  服务实现类

    public class Service1 : IService1
{
private string warmMsg = "我在服务器这边休息了5秒,你还在等吗?"; public string GetRequesAndReponseModeMessage()
{
System.Threading.Thread.Sleep();
return "请求响应模式消息" + warmMsg;
}

  第二步:客户端调用:

  

            IService1 responseService = new Service1Client();
responseService.GetRequesAndReponseModeMessage();

单工模式

单工模式的特点是:

  方法必须是void,参数类型不能是out,ref

实现方式:

  在服务接口类的方法上面添加[OperationContract(IsOneWay = true)]

实现步骤:

  第一步:服务接口

    [ServiceContract]
public interface IService1
{
[OperationContract(IsOneWay = true)]
void GetSingleModeMessage(); //[OperationContract(IsOneWay = true)]单工模式不能有返回值,参数列表中不能有out ref关键字

  服务实现类

    public class Service1 : IService1
{
public void GetSingleModeMessage()
{
System.Threading.Thread.Sleep();
}

  第二步:客户端调用

            IService1 responseService = new Service1Client();
responseService.GetSingleModeMessage();

双工模式

  客户端和服务器能相互调用,

   客户端得实现一个接口的类用于服务端调用。

客户端不用等待服务端响应就可以继续执行后续操作;

服务端自动调用在客户端中的接口实现类的方法。

实现步骤:

  第一步:服务接口类:

WCF服务端需要定义两个接口,

第一个是在WCF服务端实现该接口(例如:IService1),

第二个是在客户端实现该接口(例如:IServerDuplexCallBack)

这两个接口是通过在第一个接口(IService1)上使用如下特性进行关联的,

 

    [ServiceContract(
SessionMode = SessionMode.Required
, CallbackContract = typeof(IServerDuplexCallBack))]

而第二个接口不用声明任何特性,

   并且,两个接口的双工方法必须都是使用单工形式(即:方法声明为[OperationContract(IsOneWay = true)])

代码如下:

IService1.cs

    [ServiceContract(
SessionMode = SessionMode.Required
, CallbackContract = typeof(IServerDuplexCallBack))]
public interface IService1
{
[OperationContract(IsOneWay = true)]
void GetDuplxMModeMessage1();

IServerDuplexCallBack.cs

    /// <summary>
/// 双工模式,服务端调用客户端接口,不需要指定ServiceContract特性
/// </summary>
interface IServerDuplexCallBack
{
[OperationContract(IsOneWay = true)]
void ReturnDuplexMessage(string message);
}

  

  

  第二步:服务端的实现第一个接口IService1

服务端的实现第一个接口IService1的实现类需要使用如下特性:

[ServiceBehavior(InstanceContextMode = InstanceContextMode.PerSession)] //双工模式需要设置

并且声明一个第二接口(IServerDuplexCallBack)变量(如:callBack)指向客户端实现第二个接口(IServerDuplexCallBack)的实现类实例,并通过

        IServerDuplexCallBack callBack
{
get
{
return OperationContext.Current.GetCallbackChannel<IServerDuplexCallBack>();
}
}

来获取实例。

   Service1.cs

    [ServiceBehavior(InstanceContextMode = InstanceContextMode.PerSession)] //双工模式需要设置
public class Service1 : IService1
{ IServerDuplexCallBack callBack
{
get
{
return OperationContext.Current.GetCallbackChannel<IServerDuplexCallBack>();
}
} public void GetDuplxMModeMessage1()
{
System.Threading.Thread.Sleep();
callBack.ReturnDuplexMessage("调用GetDuplxMModeMessage1 返回的 双工模式消息"); }

  

  第三步:客户端

【1】在客户端实现第二个接口(IService1Callback)的实现类(ServerDuplexCallBack)

ServerDuplexCallBack.cs

namespace Keasy5.WCF.RAndR.Client
{
public class ServerDuplexCallBack:ServiceReference1.IService1Callback
{
public void ReturnDuplexMessage(string message)
{
MessageBox.Show(message);
}
}
}

  

  【2】在客户端调用服务端:

            InstanceContext instanceContext = new InstanceContext(new ServerDuplexCallBack());
IService1 service1 = new Service1Client(instanceContext); service1.GetDuplxMModeMessage1();

得声明一个第二个接口的实现类实例new ServerDuplexCallBack(),用于生成InstanceContext类实例,

    用于构造服务代理类IService1 service1 = new Service1Client(instanceContext);

  

    客户端不用等待服务端响应就可以继续执行后续操作,到时服务端自动调用第二个接口的实现类实例new ServerDuplexCallBack()的方法

        public void ReturnDuplexMessage(string message)
{
MessageBox.Show(message);
}

【The end】

【WCF--初入江湖】04 WCF通信模式的更多相关文章

  1. [老老实实学WCF] 第九篇 消息通信模式(上) 请求应答与单向

    老老实实学WCF 第九篇 消息通信模式(上) 请求应答与单向 通过前两篇的学习,我们了解了服务模型的一些特性如会话和实例化,今天我们来进一步学习服务模型的另一个重要特性:消息通信模式. WCF的服务端 ...

  2. 浅谈WCF的三种通信模式:请求响应模式、数据报模式和双工通讯模式

    一: WCF的服务端与客户端在通信时有三种模式:请求响应模式.数据报模式和双工通讯模式. 说一下基本知识,  1.如果想要将当前接口作为wcf服务器,则一定要加上[ServiceContract] 契 ...

  3. 十五天精通WCF——第六天 你必须要了解的3种通信模式

    wcf已经说到第六天了,居然还没有说到这玩意有几种通信模式,惭愧惭愧,不过很简单啦,单向,请求-响应,双工模式,其中的第二种“请求-响应“ 模式,这个大家不用动脑子都清楚,这一篇我大概来分析下. 一: ...

  4. [老老实实学WCF] 第十篇 消息通信模式(下) 双工

    老老实实学WCF 第十篇 消息通信模式(下) 双工 在前一篇的学习中,我们了解了单向和请求/应答这两种消息通信模式.我们知道可以通过配置操作协定的IsOneWay属性来改变模式.在这一篇中我们来研究双 ...

  5. WCF 宿主与通信模式(二)

    宿主 每个WCF服务都必须托管在Windows进程中,该进程称为宿主进程(host process) 单个宿主进程可以托管多个服务,相同的服务类型也可以托管在多个宿主进程中. wcf中托管服务一般有一 ...

  6. Open Interface Service WCF三种通信模式

    WCF三种通信模式 一.请求响应模式: 概念:客户端发送请求,一直等待服务端响应,在此期间处于等待(假死)状态:直到服务器响应,才能继续执行其他的操作: 即使返回值是void 也属于请求与答复模式. ...

  7. WCF入门四[WCF的通信模式]

    一.概述 WCF的通信模式有三种:请求/响应模式.单向模式和双工通信. 二.请求/响应模式 请求/响应模式就是WCF的默认模式,前面几篇随笔中的示例都是这种模式,当客户端发送请求后(非异步状态下),即 ...

  8. [转]十五天精通WCF——第六天 你必须要了解的3种通信模式

    wcf已经说到第六天了,居然还没有说到这玩意有几种通信模式,惭愧惭愧,不过很简单啦,单向,请求-响应,双工模式,其中的第二种“请求-响应“ 模式,这个大家不用动脑子都清楚,这一篇我大概来分析下. 一: ...

  9. C# WCF的通信模式

    wcf 通信模式一般分为三种; 1,请求/响应模式 2,单工模式 3,双工模式 一,请求/响应模式 请求/响应通信是指客户端向服务端发送消息后,服务端会向客户端发送响应.这也意味着在接收到服务的响应以 ...

随机推荐

  1. java面试题小全

    面向对象的特征有哪些方面   1. 抽象:抽象就是忽略一个主题中与当前目标2. 无关的那些方面,3. 以便更充分地注意与当前目标4. 有关的方面.抽象并不5. 打算了解全部问题,而6. 只是选择其中的 ...

  2. NFS网络操作系统介绍以及相关应用

    1. NFS服务简介 NFS是Network File System 的缩写,中文名称为网络文件系统,由Sun公司开发,功能是通过网络让不同的机器.不同的操作能够彼此分享数据,让应用程序在客户端通过网 ...

  3. c#枚举自定义,用于数据绑定。

    [AttributeUsage(AttributeTargets.Field | AttributeTargets.Property | AttributeTargets.Enum)] public ...

  4. PHP页面跳转代码

    这年头,真是好记性不如烂笔头,学的还没有忘的快,刚才用到的页面跳转,却又记不清楚了,故特意整理了一下,用做以后参考.从一个网页跳转到另一个网页,是LAMP项目中最常用的技术之一,页面跳转可能是由于用户 ...

  5. php下载文件的代码示例

    php下载文件的代码示例,需要的朋友可以参考下 <?php  $file = 'monkey.gif';  if (file_exists($file)) {  header('Content- ...

  6. js学习笔记一类型、值和变量

    js的数据类型分为两类:原始类型和对象类型 原始类型包括数字.字符串和布尔值 js中有2个特殊的原始值:null(空)和undefined(未定义) 对象是属性的集合,每个属性都由名/值对组成 js的 ...

  7. AIX 中 Paging Space 使用率过高的分析与解决

    AIX操作系统中Paging Space是很重要的设备,当系统中Paging Space使用率过高.系统内存不足时,将影响系统的整体性能,甚至会造成系统的挂起.针对这种情况,通常可以靠增加Paging ...

  8. nginx+keepalived双主高可用负载均衡

    实验环境及软件版本:CentOS版本: 6.6(2.6.32.-504.el6.x86_64)nginx版本: nginx-1.6.3keepalived版本:keepalived-1.2.7 主LB ...

  9. openerp经典收藏 对象的预定义方法(转载)

    对象的预定义方法 原文:http://shine-it.net/index.php/topic,2159.15.html 每个OpenERP的对象都有一些预定义方法,这些方法定义在基类osv.osv中 ...

  10. 《零成本实现Web自动化测试--基于Selenium》 第四章 Selenium 命令

    Selenium 命令,通常被称为Selenese,由一系列运行测试案例所需要的命令构成.按顺序排列这些命令就构成了测试脚本. 一. 验证颜面元素 1.Assertion或者Verification ...