WCF学习笔记之消息交换模式
在WCF通信中,有三种消息交换模式,OneWay(单向模式), Request/Reponse(请求回复模式), Duplex(双工通信模式)这三种通信方式。下面对这三种消息交换模式进行讲解。
1. OneWay模式,
[ServiceContract]
public interface IOneWayService
{
[OperationContract(IsOneWay = true)]
void Add(double x, double y);
}
需要在OperationContract特性中显示的添加IsOneWay=true来标识这个操作是OneWay的,另外需要注意,此时的方法是不可以带返回值的。如果包含返回值,在启动Service后,可以看到下面截图所示的错误信息,
2. Request/Reponse模式,
当我们定义一个服务的操作时,该操作默认是请求回复模式的。不管该方法是否有返回值。可以通过Fiddler进行监控。
[ServiceContract]
public interface IRequestReponseService
{
[OperationContract]
void Add(double x, double y);
}
通过Fidder发现,当没有返回值时,其实服务给了一个默认的回复消息,
3. Duplex模式
定义双工通信:
[ServiceContract(CallbackContract = typeof(IDuplexCallbackService))]
public interface IDuplexService
{
[OperationContract(IsOneWay = true)]
void GetDuplexServiceResult(string username, string password);
}
public interface IDuplexCallbackService
{
[OperationContract(IsOneWay = true)]
void ShowDuplexServiceResult(IEnumerable<Department> depts);
}
在定义服务契约时,同时指定回掉契约。
实现IDuplexService:
public class DuplexService : IDuplexService
{
public void GetDuplexServiceResult(string username, string password)
{
if (string.IsNullOrWhiteSpace(username) ||
string.IsNullOrWhiteSpace(password))
{
return;
} if(username == "Yang-Fei" &&
password == "")
{
List<Department> depts = new List<Department>()
{
new Department() { Id = , Name="Development" },
new Department() { Id = , Name="Sales" },
new Department() { Id = , Name="Operation" },
}; IDuplexCallbackService callback =
OperationContext.Current.GetCallbackChannel<IDuplexCallbackService>(); callback.ShowDuplexServiceResult(depts);
}
}
}
我们可以使用netTcpBinding/wsDualHttpBinding来作为双工通信的binding。
App.config:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.2" />
</startup>
<system.serviceModel>
<services>
<service name="Services.DuplexService" behaviorConfiguration="DuplexServiceBehavior">
<endpoint address="" binding="netTcpBinding" contract="Services.IDuplexService">
<identity>
<dns value="localhost"/>
</identity>
</endpoint>
<endpoint address="mex" binding="netTcpBinding" contract="IMetadataExchange"/>
<host>
<baseAddresses>
<add baseAddress="net.tcp://10.12.65.145/DuplexService"/>
</baseAddresses>
</host>
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior name="DuplexServiceBehavior">
<serviceMetadata httpGetEnabled="false"/>
<serviceDebug includeExceptionDetailInFaults="true"/>
</behavior>
</serviceBehaviors>
</behaviors>
</system.serviceModel>
</configuration>
需要在客户端实现回掉服务,例如:
public class DuplexCallbackServiceClient : IDuplexServiceCallback
{
public void ShowDuplexServiceResult(Department[] depts)
{
foreach (Department dept in depts)
{
Console.WriteLine("Dept Id: {0} Dept Name: {1}", dept.Id, dept.Name);
}
}
}
对服务进行调用:
static void Main(string[] args)
{
DuplexCallbackServiceClient client = new DuplexCallbackServiceClient(); InstanceContext context = new InstanceContext(client); using (DuplexServiceClient proxy = new DuplexServiceClient(context))
{
string username = "Yang-Fei"; string password = ""; proxy.GetDuplexServiceResult(username, password);
} Console.ReadKey();
}
运行结果:
代码点击这里下载,
感谢您的阅读。
WCF学习笔记之消息交换模式的更多相关文章
- WCF系列教程之消息交换模式之请求与答复模式(Request/Reply)
1.使用WCF请求与答复模式须知 (1).客户端调用WCF服务端需要等待服务端的返回,即使返回类型是void (2).相比Duplex来讲,这种模式强调的是客户端的被动接受,也就是说客户端接受到响应后 ...
- WCF消息交换模式之双工通讯(Duplex)
WCF消息交换模式之双工通讯(Duplex) 双工通讯Duplex具有以下特点: 1它可以在处理完请求之后,通过请求客户端中的回调进行响应操作 2.消息交换过程中,服务端和客户端角色会发生调换 3.服 ...
- WCF初探-3:WCF消息交换模式之单向模式
单向模式(One-Way Calls): 在这种交换模式中,存在着如下的特征: 只有客户端发起请求,服务端并不会对请求进行回复 不能包含ref或者out类型的参数 没有返回值,返回类型只能为void ...
- WCF初探-4:WCF消息交换模式之请求与答复模式
请求与答复模式( Request/Reply) 这种交换模式是使用最多的一中,它有如下特征: 调用服务方法后需要等待服务的消息返回,即便该方法返回 void 类型 相比Duplex来讲,这种模式强调的 ...
- WCF消息交换模式之请求-响应模式
WCF的消息交换模式(MEP)有三种:请求/响应.单向模式和双工模式.WCF的默认MEP是请求/响应模式. 请求/响应模式操作签名代码如下,无需指定模式,默认就是. [OperationContrac ...
- WCF系列教程之WCF消息交换模式之单项模式
1.使用WCF单项模式须知 (1).WCF服务端接受客户端的请求,但是不会对客户端进行回复 (2).使用单项模式的服务端接口,不能包含ref或者out类型的参数,至于为什么,请参考C# ref与out ...
- WCF学习之旅—HTTP双工模式(二十)
WCF学习之旅—请求与答复模式和单向模式(十九) 四.HTTP双工模式 双工模式建立在上文所实现的两种模式的基础之上,实现客户端与服务端相互调用:前面介绍的两种方法只是在客户端调用服务端的方法,然后服 ...
- WCF学习笔记之事务编程
WCF学习笔记之事务编程 一:WCF事务设置 事务提供一种机制将一个活动涉及的所有操作纳入到一个不可分割的执行单元: WCF通过System.ServiceModel.TransactionFlowA ...
- WCF学习笔记之传输安全
WCF学习笔记之传输安全 最近学习[WCF全面解析]下册的知识,针对传输安全的内容做一个简单的记录,这边只是简单的记录一些要点:本文的内容均来自[WCF全面解析]下册: WCF的传输安全主要涉及认证. ...
随机推荐
- 开始做POI啦...
库 为了效率搞了这么一个库: 现在版本号1.14(一月十四日更新版本囧..) http://pan.baidu.com/s/1c0SoGfu [source] http://pan.baidu.com ...
- PL/Cool
毛子 2003 Petrozavodsk, Final Contest, 8.30.03. G. PL/Cool 实现一个程序,使它读入一段PL/Cool程序,并输出它的结果. PL/Cool语法 b ...
- Linux Vsftpd 连接超时解决方法
Linux Vsftpd 连接超时解决方法 2013-11-13 10:58:34| 分类: 默认分类|举报|字号 订阅 解决方法(http://www.lingdus.com/thread ...
- bitnami-redmine 安装与插件使用
bitnami-redmine 公司要进行敏捷开发管理,选择Redmine作为管理工具. 而Redmine本身的需要的环境比较麻烦,需要安装mysql,ruby,redmine,apach. Bitn ...
- 【leetcode】Reverse Linked List II
Reverse Linked List II Reverse a linked list from position m to n. Do it in-place and in one-pass. F ...
- POJ 3728
http://poj.org/problem?id=3278 题目大意就是在同一坐标轴上给你一个人的坐标,一个牛的坐标,而人的运动每一次运动有三种方式,一种是后退1,一种是前进1,还有一种是坐标翻倍, ...
- UIWebView内嵌网页 Xcode7.0以后的用法
UIWebView* webPage=[[UIWebView alloc]initWithFrame:CGRectMake(0, 0, screenWidth, screenHeight-64)]; ...
- Enum:Fliptile(POJ 3279)
Fliptile 题目大意:农夫想要测牛的智商,于是他把牛带到一个黑白格子的地,专门来踩格子看他们能不能把格子踩称全白 这一题其实就是一个枚举题,只是我们只用枚举第一行就可以了,因为这一题有点像开关一 ...
- (转)JAVA AJAX教程第二章-JAVASCRIPT基础知识
开篇:JAVASCRIPT是AJAX技术中不可或缺的一部分,所以想学好AJAX以及现在流行的AJAX框架,学好JAVASCRIPT是最重要的.这章我给大家整理了一些JAVASCRIPT的基础知识.常用 ...
- 最喜欢的VS 键盘快捷键摘抄
最喜欢的Visual Studio键盘快捷键(关闭) 336年最喜欢的 425年 你最喜欢的Visual Studio键盘快捷键是什么? 我总是让我的手在键盘上,远离鼠标! 一个请每回答. net ...