【WCF--初入江湖】04 WCF通信模式
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通信模式的更多相关文章
- [老老实实学WCF] 第九篇 消息通信模式(上) 请求应答与单向
老老实实学WCF 第九篇 消息通信模式(上) 请求应答与单向 通过前两篇的学习,我们了解了服务模型的一些特性如会话和实例化,今天我们来进一步学习服务模型的另一个重要特性:消息通信模式. WCF的服务端 ...
- 浅谈WCF的三种通信模式:请求响应模式、数据报模式和双工通讯模式
一: WCF的服务端与客户端在通信时有三种模式:请求响应模式.数据报模式和双工通讯模式. 说一下基本知识, 1.如果想要将当前接口作为wcf服务器,则一定要加上[ServiceContract] 契 ...
- 十五天精通WCF——第六天 你必须要了解的3种通信模式
wcf已经说到第六天了,居然还没有说到这玩意有几种通信模式,惭愧惭愧,不过很简单啦,单向,请求-响应,双工模式,其中的第二种“请求-响应“ 模式,这个大家不用动脑子都清楚,这一篇我大概来分析下. 一: ...
- [老老实实学WCF] 第十篇 消息通信模式(下) 双工
老老实实学WCF 第十篇 消息通信模式(下) 双工 在前一篇的学习中,我们了解了单向和请求/应答这两种消息通信模式.我们知道可以通过配置操作协定的IsOneWay属性来改变模式.在这一篇中我们来研究双 ...
- WCF 宿主与通信模式(二)
宿主 每个WCF服务都必须托管在Windows进程中,该进程称为宿主进程(host process) 单个宿主进程可以托管多个服务,相同的服务类型也可以托管在多个宿主进程中. wcf中托管服务一般有一 ...
- Open Interface Service WCF三种通信模式
WCF三种通信模式 一.请求响应模式: 概念:客户端发送请求,一直等待服务端响应,在此期间处于等待(假死)状态:直到服务器响应,才能继续执行其他的操作: 即使返回值是void 也属于请求与答复模式. ...
- WCF入门四[WCF的通信模式]
一.概述 WCF的通信模式有三种:请求/响应模式.单向模式和双工通信. 二.请求/响应模式 请求/响应模式就是WCF的默认模式,前面几篇随笔中的示例都是这种模式,当客户端发送请求后(非异步状态下),即 ...
- [转]十五天精通WCF——第六天 你必须要了解的3种通信模式
wcf已经说到第六天了,居然还没有说到这玩意有几种通信模式,惭愧惭愧,不过很简单啦,单向,请求-响应,双工模式,其中的第二种“请求-响应“ 模式,这个大家不用动脑子都清楚,这一篇我大概来分析下. 一: ...
- C# WCF的通信模式
wcf 通信模式一般分为三种; 1,请求/响应模式 2,单工模式 3,双工模式 一,请求/响应模式 请求/响应通信是指客户端向服务端发送消息后,服务端会向客户端发送响应.这也意味着在接收到服务的响应以 ...
随机推荐
- iOS-图片拉伸,最常用的图片拉伸操作总结(干货)
概念介绍 直接拉伸图片有时候会导致图片四周变的很模糊 所以要想办法使图片四周的形状不变.于是,端盖(end cap)的概念出来了,用来指定图片中的哪一部分不用拉伸.比如下图中,黄色代表需要被拉伸的矩形 ...
- Mac OS X中开启或关闭显示隐藏文件
打开终端,输入:defaults write com.apple.finder AppleShowAllFiles -bool true 此命令显示隐藏文件defaults write com.app ...
- oracle11.0.2 64位版本 Toad连接
今天重装了系统 oracle oracle客户端 之前连不上toad 今天总结 客户端路径:E:\app\ruonanxiao-pc\product\11.2.0\client_1 服务端路径:E: ...
- js设计模式(3)---桥接模式
0.前言 看设计模式比较痛苦,一则是自己经验尚浅,不能体会到使用这些设计模式的益处:二则是不能很好把握使用这些设计模式的时机.所以这一部分看得断断续续,拖拖拉拉,为了了却这快心病,决定最近一口气看完几 ...
- Window 8.1 计时器功能及图片切换
<Canvas Margin="450,0" Width="795" Grid.Column="1"> <Image Ma ...
- 推荐一些C#相关的网站、资源和书籍
一.网站 1.http://msdn.microsoft.com/zh-CN/ 微软的官方网站,C#程序员必去的地方.那里有API开发文档,还有各种代码.资源下载. 2.http://social.m ...
- JAVA多线程学习1
一.进程与线程 线程是指进程内的一个执行单元(可理解为程序内的一条执行路径),也是进程内的可调度实体. 线程与进程的区别: 1.线程是进程的一个执行单元,一个进程可以拥有多个线程,线程之间共享进程的地 ...
- jquery实现密码框显示提示文字
jquery实现密码框提示文字的功能. 代码: <html> <head> 3 <title>登录-jquery实现密码框显示文字-www.jbxue. ...
- php 文件上传简单类---限制仅上传jpg文件
php 文件上传代码,限制只能上传jpg格式文件,也可以自行添加其它扩展名的文件. <?php /* * 图片上传类 仅限JPG格式图片 * edit by www.jbxue.com at 2 ...
- SQL中的日期时间函数
之所以把日期时间函数单独拿出来回顾一下,是因为这一部分的内容比较独立,C#中也有类似的日期时间函数,趁着想得起来,写个标题先.