本文demo已上传至github:xinyuehtx/WCFdemo

这个博客会介绍如何设置服务操作调用模式的第三种双工模式(Duplex)


双工模式

双工模式意味这个客户端可以向服务端发送消息,同时服务端也可以向客户端发送消息

双工模式实际上是由客户端->服务端的服务协议和服务端->客户端的回调协议组成。

而每个协议中的方法都可以选择是单向模式,或者是请求答复模式。

因此双工模式实际上是之前两种模式的组合。

如图所示在创建双工模式的协定时,我们需要定义两个接口IDuplex用于客户端向服务端发送消息(或者称之为调用服务端方法),IDuplexCallback用于服务端向客户端发送消息(或者称之为调用客户端方法)

注意我们通过设置 ServiceContractCallbackContract指定服务的回调接口

在服务端实现上我们额外通过OperationContext获取定义为IDuplexCallback接口的通道。

通过这个通道(客户端的透明代理),在服务端就可以调用客户端的方法

在客户端实现上也有变动,我们需要继承DuplexClientBase<T>,同时我们的构造函数也需要额外传入一个InstanceContext

在客户端的使用时,我们需要将回调接口的实现注入到InstanceContext中,并且传入客户端的构造函数

运行程序,我们发现,客户端向服务端发送了消息,服务端也向客户端发送了消息。实现了双向的通信

小结

我们研究了WCF服务的双工模式,其特点有

  • 可以实现双向通信
  • 协定的每个方法都可以通过OperationContract指定为单向或者请求答复模式
  • 双工协定要求Binding支持双工模式(如NetTcpBinding)
  • 双工模式在底层实现利用了会话机制,但是在指定服务协定时可以不要求会话(Require)。

参考链接:

  • 请求-答复服务 - Microsoft Docs
  • 单向服务 - Microsoft Docs
  • 双工服务 - Microsoft Docs

本文会经常更新,请阅读个人博客原文: https://xinyuehtx.github.io/ ,以避免陈旧错误知识的误导,同时有更好的阅读体验。

本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可。欢迎转载、使用、重新发布,但务必保留文章署名黄腾霄(包含链接: https://xinyuehtx.github.io/ ),不得用于商业目的,基于本文修改后的作品务必以相同的许可发布。如有任何疑问,请 与我联系 。

wcf入门(5)——双工模式相关推荐

  1. WCF服务创建与使用(双工模式)

    昨天发布了<WCF服务创建与使用(请求应答模式)>,今天继续学习与强化在双工模式下WCF服务创建与使用,步骤与代码如下. 第一步,定义服务契约(Service Contract),注意Se ...

  2. [WCF编程]1.WCF入门示例

    一.WCF是什么? Windows Communication Foundation(WCF)是由微软开发的一系列支持数据通信的应用程序框架,整合了原有的windows通讯的 .net Remotin ...

  3. 在WCF中实现双工通信(转载)

    首先声明此文章是转载博客园蒋老师之作:http://www.cnblogs.com/artech/archive/2007/03/02/661969.html 双工(Duplex)模式的消息交互方式体 ...

  4. WCF三种通信模式(转)

    一.概述 WCF在通信过程中有三种模式:请求与答复.单向.双工通信.以下我们一一介绍. 二.请求与答复模式 描述: 客户端发送请求,然后一直等待服务端的响应(异步调用除外),期间处于假死状态,直到服务 ...

  5. WCF 宿主与通信模式(二)

    宿主 每个WCF服务都必须托管在Windows进程中,该进程称为宿主进程(host process) 单个宿主进程可以托管多个服务,相同的服务类型也可以托管在多个宿主进程中. wcf中托管服务一般有一 ...

  6. [转载]我的WCF之旅(3):在WCF中实现双工通信

    http://www.cnblogs.com/artech/archive/2007/03/02/661969.html 双工(Duplex)模式的消息交换方式体现在消息交换过程中,参与的双方均可以向 ...

  7. C#-异步编程及WCF入门

    异步编程 异步代码在等待I/O请求响应的同时,可通过生成更多的线程,处理更多的请求 异步代码在等待I/O请求的同时,可生成UI交互线程,并通过将耗时的工作转移到其他CPU内核的方式,让UI的响应速度更 ...

  8. WCF 入门之旅(4): 怎样用客户端调用WCF服务

    WCF 入门之旅(4): 怎样用客户端调用WCF服务 前面的demo已经能够跑起来,现在开始考虑用客户端来测试所写的应用了,首先用个普通的应用程序来调用所写的wcf服务吧.其实最后运行wcf服务后的页 ...

  9. WCF入门(六)——回调

    在上篇文章中介绍了一下WCF中的客户端到服务器端的单向通知,在实际应用中,还经常使用服务器端到客户端的单向通知.例如,在聊天室里,我们需要把某人的发言广播给每一个人.对于这种单向通知,我们一般称为回调 ...

最新文章

  1. WDS部署服务之四镜像捕获(1)
  2. 多进程对 MySQL update的影响
  3. ajaxToolKit中 的折叠面板用法--Accordion
  4. 第四届西安邮电大学acm-icpc校赛 流浪西邮之寻找火石碎片 多体积条件背包
  5. wxWidgets:wxRichTextCtrl概述
  6. python按字节读取文件_Python读取二进制文件
  7. 精选30张炫酷的动态交互式图表,Pandas一键生成,通俗易懂
  8. java后台 flex前台例子_flex+blazeds+java后台消息推送(简单示例)
  9. 话说Python:非主流编程语言
  10. 会议容易中吗_【留学评估】美国留学后就业真的和想象中的一样容易吗?
  11. ONNX系列六 --- 在Java中使用可移植的ONNX AI模型
  12. linux搭建Django环境,linux下搭建python Django环境及启动一个示例
  13. 《卷积神经网络》学习笔记
  14. DNS、NS、DDNS
  15. mysql5.6卸载干净_Mysql完全干净卸载教程
  16. 【K8S etcd篇】部署etcd 3.4.14 集群
  17. 温湿度传感器—HDC1080
  18. OpenGL 4 : 一个漂亮的心 For you, My Love
  19. Excel用户如何打破内卷?只需要一个新软件,就能突破excel天花板
  20. 如何打开倾斜摄影数据osgb

热门文章

  1. python柱形图绘制_Excel2007如何绘制目标线柱形图_python绘制柱形图
  2. liunx环境下 python使用stmplib 发邮箱
  3. ios添加邮件收件服务器,全球邮在iPhone上使用的设置说明
  4. 【转】SAP为企业数字化转型赋能
  5. Java的窗口实例设置小图标
  6. 《C++开发工程师岗位必备知识点一》
  7. 搜索引擎官网认证申请
  8. 6-1 计算两数的和与差 (10 分)
  9. vue项目中高德地图的注册及使用
  10. Linux 命令(256)—— stty 命令