艾伟:WCF从理论到实践(8):事件广播

  • 时间:
  • 浏览:1
  • 来源:大发彩神app—大发彩神8苹果版

咋样实现俩个 多基于duplex的事件广播

项目描述

和完后 文章不同,本文先给出最后实现的效果

服务的宿主程序,俩个 多ConsoleApplication

本文属于中等难度的文章,前要有WCF消息交换和windows应用程序开发相关的基础知识,有关WCF消息交换,请阅读http://www.cnblogs.com/jillzhang/archive/508/02/17/1071521.html

项目名称

WCF从理论到实践(9):实例模式和对象生命周期

WCF从理论到实践(11)-异步

WCF从理论到实践(14):WCF外理方案模板

2)InstanceContextMode = InstanceContextMode.PerSession却为社 会么会会能实现广播?

Jillzhang.Event.Service

WCF从理论到实践(2):决战紫禁之巅

WCF从理论到实践(17):OO大背离(带视频+ppt+源码)

WCF从理论到实践(7):消息交换模式

WCF从理论到实践(6):WCF架构

在讨论咋样实现完后 ,先看一下本文的范例所要实现的功能是哪些?本文的范例实现了俩个 多简单的分布式任务管理系统,简单的说,它是在服务端(Server Point)执行任务(Job),有并且将任务的信息呈现给客户端。它有如下特征:

服务端的具体实现,其中Server实现了俩个 多有广播事件能力的服务契约

通过阅读本文,您能理解以下知识:

客户端实现,用于消费服务端。

也不我的示例代码中,采用的Binding为NetTcpBinding,有让当你们 问用WsDualHttpBinding的完后 总出 异常,也作了俩个 多示例

Jillzhang.Event.Client2

3)困扰了我半天的问题图片

WCF从理论到实践(15):响应变化

WCF从理论到实践(3):八号当铺之黑色契约

WCF从理论到实践(1):揭开神秘面纱

本文中的范例 

范例最终实现:/Files/jillzhang/Jillzhang.Event.rar

和Jillzhang.Event.Client是俩个 多实现,但为了验证广播,可与Jillzhang.Event.Client一块儿消费服务端

本文的出发点

Jillzhang.Event.Client

WCF从理论到实践(16):操作重载(带视频+ppt+源码)

WCF从理论到实践(5):Binding细解



初步探讨一下异步

WCF从理论到实践(12):事务

本文适合的读者

上文讨论了WCF中三种消息交换模式,one-way,request/reply,duplex。前两项比较简单,不想多言,duplex相对比较僵化 ,上文也不我实现了简单的回调,在真正应用的完后 ,还有其他值得注意之处,本文就结合俩个 多实际的应用例子来谈论下duplex的具体应用和非常值得让当你们 注意的地方。

可能性将InstanceContextMode设置为PerSession,让当你们 知道服务端对象是针对每俩个 多会话的,也也不我说每个会话会产生俩个 多对象实例,也不我可能性要实现广播,让当你们 前要将当前服务含有的会话信息用俩个 多列表对象记录下来,广播的完后 ,让当你们 遍历会话列表,进行逐个回调。本示例中巧妙的利用了Event可包括多个委托实例的特征,俩个 多静态的Event对象针对每个会话创建俩个 多委托实例便都不能完成上述的要求。遍历回调的辦法 便都不能编写如下:  

本文的参考资料

WCF从理论到实践(4):路在何方

会不想在Accept后Do()辦法 前的过程中会话过期了呢?并且经过验证,的确是此处的问题图片,外理辦法 是通过设置操作契约的IsTerminating来实现会话的维护,当俩个 多操作契约的IsTerminating被设置为false的完后 ,该操作不想意味着着会话的中断,将IServer设计如下便外理了我的问题图片 :

而在客户端,让当你们 都不能起多个程序,当然最方便快捷的辦法 也不我使用BackGroundWorker后台程序来外理耗时比较长的操作了,具体实现也都不能参考Jillzhang.Event.Client项目中的Form1.cs实现。

咋样您要了解该范例得具体设计和实现,都不能下载下面的文件进行分析:

范例最终实现:/Files/jillzhang/Jillzhang.Event.rar

我这里只列出范例中项目列表

应用程序间通讯是一件很耗时的事情,可能性同步执行会造成程序的阻塞,可能性是在服务端,会降低服务的外理能力(什儿 说法可能性其他问题图片,我会进一步求证,估计保留,经过查证多程序在服务端的好处在于提供对单个请求用多个程序外理的能力,从而外理完成俩个 多请求完后 ,无法接受新的请求),可能性是在客户端,会给用户带来不好的体验。下面就分别探讨一下咋样实现服务端和客户端的异步。

Jillzhang.Event.Core

在服务端,俩个 多事件的异步都不能通过delegate的BeginInvoke和EndInvoke来实现,具体辦法 都不能参见示例项目Jillzhang.Event.Service中的Server对象的辦法 BroadcastEvent辦法 的实现

Jillzhang.Event.Host

WCF从理论到实践(13):事务投票

WCF从理论到实践(10):异常外理

上篇文章中,可能性对duplex有了初步的认识,本以为本文的范例实现会很顺利呢,可有俩个 多问题图片却困扰了我半天,在回调的完后 非常不稳定,有时能回调4.5次,有时1,2次完后 ,再回调却没哟响应,开始百思不得其解,可能性开始有几个可成功回调,为社 会么会会会不稳定呢?经过好一番尝试,也没能外理,回调没能 响应,肯定是客户端与服务端选择选择离开了连接,会话过期就会造成双方通讯连接的中断,经过分析,我的系统是也不我的

让当你们 知道ConcurrencyMode是控制服务并发的,默认情况表下ConCurrendMode的值为Single,它设置服务运行在单程序下,当上俩个 多请求未完成完后 ,服务是不接受下俩个 多请求的。而duplex在进行回调的完后 ,可能性回调辦法 没能 被设置为 One-Way的交换模式,服务端是会听候客户端对回调的响应的,这可都在一件好事情,可能性服务端不须能保证客户端能正常地执行回调并返回数据。更多的情况表下,让当你们 期望回调在发出都不能立即返回,辦法 有俩个 多:a)将回调辦法 设置为One-Way交换模式 b)采用多程序。经过我的测试,当回调辦法 被设置了one-way模式后,将ConcurrencyMode设置为Single是都不能实现duplex双向通讯的。 要第二种辦法 也非常简单,只前要将ConcurrencyMode设置为Mutiple.此时即使回调辦法 都在one-way模式,也是都不能完成duplex的。值得说明一下的是ConcurrencyMode还有中性的属性:ConcurrencyMode.Reentrant,说句心里话,我不喜欢什儿 不伦不类的家伙,他能实现在单程序下一块儿接受多个请求,但有利必有弊,什儿 家伙非要保证请求事务的完正性,使用的完后 应该谨慎。

解析在实现duplex事件广播中的有几个问题图片

该项目用于定义WCF的契约,主要包括IServer服务契约,ICallback用于回调的服务契约,Job数据契约

1) Duplex模式对服务行为ConcurrencyMode的要求

WCF从理论到实践(8):事件广播