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(主机模式).要想在网络管理和维护中合理应用它们,你就应该先了解一下这三种工作模式.这里 ...
随机推荐
- 报错:严重: Servlet.service() for servlet [jsp] in context with path [/20161116-Struts2-6] threw exception [/index.jsp (line: 13, column: 20) No tag "textfiled" defined in tag library imported with prefix
严重: Servlet.service() for servlet [jsp] in context with path [/20161116-Struts2-6] threw exception [ ...
- 黄聪:基于jQuery+JSON的省市区三级地区联动
查看演示:http://www.helloweba.com/demo/cityselect/ 源码下载:http://files.cnblogs.com/files/huangcong/citysel ...
- linux后台进程管理工具supervisor
Linux的后台进程运行有好几种方法,例如nohup,screen等,但是,如果是一个服务程序,要可靠地在后台运行,我们就需要把它做成daemon,最好还能监控进程状态,在意外结束时能自动重启. su ...
- Angular SEO方案
1.如果是java web项目,可以直接使用AngularSEO Filter. 官网地址 :http://www.angularseo.net/#about <filter> <f ...
- 网络换行符替换为word换行符
在替换的页面上,查找里输入:^l,在替换里输入:^p,然后点击替换即可.
- Python基础篇【第2篇】: Python文件操作
Python文件操作 在Python中一个文件,就是一个操作对象,通过不同属性即可对文件进行各种操作.Python中提供了许多的内置函数和方法能够对文件进行基本操作. Python对文件的操作概括来说 ...
- X-Cart 学习笔记(一)了解和安装X-Cart
目录 X-Cart 学习笔记(一)了解和安装X-Cart X-Cart 学习笔记(二)X-Cart框架1 X-Cart 学习笔记(三)X-Cart框架2 X-Cart 学习笔记(四)常见操作 一.了解 ...
- js实现日历卡
效果图如下 首先先添加简单的样式 <style type="text/css"> *{padding:0;margin:0;} #tab { margin:0 auto ...
- oracle创建包后执行报错:object omgmig.test_package is invalid.
今天学习了一下oracle的包的写法,然后碰到这么个问题.包声明和包主体都正确,但是就是执行报错:object omgmig.test_package is invalid. 这是会报错的sql,看起 ...
- NUGET命令
主题 about_NuGet 简短说明 提供有关 NuGet 程序包管理器命令的信息. 详细说明 本主题介绍 NuGet 程序包管理器命令.NuGet 是一种集成的程序包 管理工具,用于将库和工具添加 ...