WCF三种通信模式
WCF在通信过程中有三种模式:请求与答复、单向、双工通信。
请求与答复模式
描述:客户端发送请求,然后一直等待服务端的响应(异步调用除外),期间处于假死状态,直到服务端有了答复后才能继续执行其他程序
请求与答复模式为WCF的默认模式,如下代码所示:
[OperationContract]
string ShowName(string name);
即使返回值是void 也属于请求与答复模式。
缺点:如果用WCF在程序A中上传一个2G的文件,那么要想执行程序B也许就是几个小时后的事情了。如果操作需要很长的时间,那么客户端程序的响应能力将会大大的下降。
优点:有返回值我们就可以向客户端返回错误信息,如:只接收".rar"文件等信息。
单向模式
描述:客户端向服务端发送求,但是不管服务端是否执行完成就接着执行下面的程序。
单向模式要在OpertaionContract的属性中显示设置值,代码如下:
[OperationContract(IsOneWay = true)]
void ShowName(string name);
优缺点与“请求响应模式”差不多倒过来。
特点:使用 IsOneWay=true 标记的操作不得声明输出参数、引用参数或返回值。
双工模式
描述:双工模式建立在答复模式和单向模式的基础之上,实现客户端与服务端相互的调用。
相互调用:以往我们只是在客户端调用服务端,然后服务端有返回值返回客户端,而相互调用不光是客户端调用服务端,而且服务端也可以调用客户端的方法。
1.添加WCF服务 Service2.svc,并定义好回调的接口,服务器端接口IService2.cs:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.Text; namespace WcfService1
{
//CallbackContract = typeof(IService2CallBack) 定义回调的接口类型
[ServiceContract(CallbackContract = typeof(IService2CallBack))]
public interface IService2
{
[OperationContract]
string ShowName(string name);
} //回调的接口,该接口中的方法在客户端实现
public interface IService2CallBack
{
//IsOneWay = true 启动单向模式,该模式方法不能有返回值
[OperationContract(IsOneWay = true)]
void PrintSomething(string str);
}
}
2.服务端实现 Service2.svc
using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.Text; namespace WcfService1
{
public class Service2 : IService2
{
IService2CallBack callback = null;//回调接口类型 public Service2()
{
//获取调用当前操作的客户端实例
callback = OperationContext.Current.GetCallbackChannel<IService2CallBack>();
} /// <summary>
/// 被客户端调用的服务
/// </summary>
/// <param name="name"></param>
/// <returns></returns>
public string ShowName(string name)
{
callback.PrintSomething(name);
return "服务器调用客户端,WCF服务,显示名称:xsj...";
}
}
}
3.服务器端配置,web.config 在system.serviceModel中添加配置,
支持回调的绑定有4种:WSDualHttpBinding、NetTcpBinding、NetNamedPipeBinding、NetPeerTcpBinding。
我们这里用WSDualHttpBinding为例:
<endpoint address="" binding="wsDualHttpBinding" contract="WcfService1.IService2"></endpoint>
<system.serviceModel>
<services>
<service name="WcfService1.Service2">
<endpoint address="" binding="wsDualHttpBinding" contract="WcfService1.IService2"></endpoint>
</service>
</services>
</system.serviceModel>
4.客户端调用
class Program
{
static void Main(string[] args)
{
InstanceContext instanceContext = new InstanceContext(new CallbackHandler());
Service2Client client = new Service2Client(instanceContext); string result = client.ShowName("jay.xing");
Console.WriteLine(result);
Console.ReadLine();
}
} //实现服务端的回调接口
public class CallbackHandler : IService2Callback
{
public void PrintSomething(string str)
{
Console.WriteLine("test data:" + str);
}
}
介绍结束,参考:http://www.cnblogs.com/iamlilinfeng/archive/2012/10/03/2710698.html
WCF三种通信模式的更多相关文章
- Open Interface Service WCF三种通信模式
WCF三种通信模式 一.请求响应模式: 概念:客户端发送请求,一直等待服务端响应,在此期间处于等待(假死)状态:直到服务器响应,才能继续执行其他的操作: 即使返回值是void 也属于请求与答复模式. ...
- 浅谈WCF的三种通信模式:请求响应模式、数据报模式和双工通讯模式
一: WCF的服务端与客户端在通信时有三种模式:请求响应模式.数据报模式和双工通讯模式. 说一下基本知识, 1.如果想要将当前接口作为wcf服务器,则一定要加上[ServiceContract] 契 ...
- WCF(二)三种通信模式
WCF在通信过程中有三种模式:请求与答复.单向.双工通信 请求与答复模式 客户端发送请求,然后一直等待服务端的响应答复(异步调用除外),期间处于假死状态,直到服务端有了答复后才能继续执行其他程序 请求 ...
- 十五天精通WCF——第六天 你必须要了解的3种通信模式
wcf已经说到第六天了,居然还没有说到这玩意有几种通信模式,惭愧惭愧,不过很简单啦,单向,请求-响应,双工模式,其中的第二种“请求-响应“ 模式,这个大家不用动脑子都清楚,这一篇我大概来分析下. 一: ...
- [转]十五天精通WCF——第六天 你必须要了解的3种通信模式
wcf已经说到第六天了,居然还没有说到这玩意有几种通信模式,惭愧惭愧,不过很简单啦,单向,请求-响应,双工模式,其中的第二种“请求-响应“ 模式,这个大家不用动脑子都清楚,这一篇我大概来分析下. 一: ...
- 虚拟机安装Ubuntu三种网络模式
VMWare提供三种工作模式桥接(bridge).NAT(网络地址转换)和host-only(主机模式). NAT(网络地址转换) 在NAT模式下,虚拟系统需要借助NAT(网络地址转换)功能,通过宿主 ...
- VMWare提供了三种工作模式上网
VMWare提供了三种工作模式,它们是bridged(桥接模式).NAT(网络地址转换模式)和host-only(主机模式).要想在网络管理和维护中合理应用它们,你就应该先了解一下这三种工作模式. 1 ...
- vmware虚拟机三种网络模式详解_转
原文来自http://note.youdao.com/share/web/file.html?id=236896997b6ffbaa8e0d92eacd13abbf&type=note 由于L ...
- VMWare三种工作模式 :bridge、host-only、nat
VMWare提供了三种工作模式,它们是bridged(桥接模式).NAT(网络地址转换模式)和host-only(主机模式).要想在网络管理和维护中合理应用它们,你就应该先了解一下这三种工作模式.这里 ...
随机推荐
- HTML 空格的表示符号 nbsp / ensp / emsp 的区别
HTML 空格的表示符号 nbsp / ensp / emsp 的区别? 半角的不断行的空白格(推荐使用) 半角的空格 全角的空格
- ASP.NET MVC Web API 学习笔记---第一个Web API程序
http://www.cnblogs.com/qingyuan/archive/2012/10/12/2720824.html GetListAll /api/Contact GetListBySex ...
- SQL Server2005作业执行失败的解决办法
数据库:SQL Server 2005,运行环境:Windows Server 2008 在数据库里的所有作业都执行失败,包括自动执行和手动执行.在事件查看器里看到的错误报告如下: 该作业失败. ...
- netbean7.2 改变maven插件的中心库地址
今天内网安装netbeans 7.2(因为所使用的JDK版本问题),但安装上去之后发现build failure,提示说仓库主机找不到,因为提示上说的是apache的仓库地址.看执行maven的输出可 ...
- xml中数据存储 <![CDATA[ … ]]>
在xml中 有些可能是 转义的字符 比如像<等 &符号, 你没发现 在加参数后面要进行转义 写成: 可以是& 但是每处都要 这么写. 在未来不可控的 ...
- 一张图教你搞定Mac App Store 应用安装包存储路径
还在为找不到App Store 更新应用的安装文件发愁吗?是否有过多个人同时需要更新Xcode,都自己下载一次的痛苦经历? 大家都知道通过苹果服务器下载东西,确实难耐!AppStore 甚至都经常提示 ...
- SVN服务器详细权限控制
版权声明:本文为博主原创文章,未经博主允许不得转载. 下面是我配置SVN服务器的过程,现在把我所配置的方法,记录下来,以供其他有需要的朋友参考,需要改进的地方,请指教! 一 环境 操作系统:windo ...
- 利用反射及JDBC元数据编写通用查询方法
元数据:描述数据的数据,ResultSetMetaData是描述ResultSet的元数据对象,从它可以得到数据集有多少了,每一列的列名... ResultSetMetaData可以通过ResultS ...
- hbase运行shell时ERROR:org.apache.hadoop.hbase.PleaseHoldException: Master is initializing 的解决办法
这个问题困扰了我一天多的时间,百度搜索的前几条的答案也是很扯淡的,说什么把/etc/hosts文件下的127.0.1.1改成127.0.0.1就行了,我也只能呵呵了.今天早上起得很晚,中午迪哥请我们去 ...
- Jmeter-获取响应结果中参数出现的次数
在测试中,有时候会遇到要统计响应结果中某个参数出现了多少次,如果量级很大,一个一个数不太现实,下面讲一下实现自动打印出该参数出现的次数的方法. 例如我的响应信息为:{"ip":&q ...