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(主机模式).要想在网络管理和维护中合理应用它们,你就应该先了解一下这三种工作模式.这里 ...
随机推荐
- How to Allow MySQL Client to Connect to Remote MySql
How to Allow MySQL Client to Connect to Remote MySQ By default, MySQL does not allow remote clients ...
- excel表格中关于 撤销工作表保护密码
利用宏处理,代码如下: Sub PasswordBreaker() Dim i As Integer, j As Integer, k As Integer Dim l As Integer, m A ...
- Perl删除数组中元素的多种方法
Perl中的数组元素起始引用序号为0,@array的第一个元素为$array[0],依次递增,最后一个元素为$array[-1]或者$#array.如果要删除一个数组中已有的元素,可以用以下几个函数来 ...
- Apache-Maven学习(转)
之前听同学说过关于他们公司使用Maven框架来做项目管理,后来也跟他一起参与过一个小的项目,但没有仔细的去搞,现在好好学习一下. 文章转载自:易百教程 [http:/www.yiibai.com] A ...
- Android总结篇系列:Activity Intent Flags及Task相关属性
同上文一样,本文主要引用自网上现有博文,并加上一些自己的理解,在此感谢原作者. 原文地址: http://blog.csdn.net/liuhe688/article/details/6761337 ...
- sql server 相似度对比
转自:http://www.dotblogs.com.tw/rachen/archive/2008/10/07/5611.aspx 函數一.產生 Like 比對用字串 ) ) ) as begin / ...
- SQL Error (1130): Host '192.168.1.126' is not allowed to connect to this MySQL server
通过HeidiSQL连接MYSQL数据库报错: SQL Error (1130): Host '192.168.1.126' is not allowed to connect to this MyS ...
- 自制公众平台Web Api(微信)
最近一段时间感觉没什么东西可以分享给大家,又由于手上项目比较赶,不太更新博客了,今天趁着生病闲下来的时间分享一些项目中的东西给大家. 公众平台 提起公众平台当下最流行的莫过于腾讯的微信了,当然还有易信 ...
- java连接mysql :No Suitable Driver Found For Jdbc 解决方法
今天出现编码出现了No suitable driver found for jdbc,又是找遍了网上的资料,基本上都说是以下个问题: 一是:连接URL格式出现了问题(Connection con ...
- boost::asio::socket tcp 连接 在程序结束时崩溃。
刚开始的时候一直不知道怎么回事,不过幸好我有在每个class 的析构时都打印一条信息. 这个时候发现我的一个tcp_connection (就是自定义的一个连接类) 在最后才被析构. 所以感觉这里可能 ...