如何利用callback机制开发基于WCF的事件发布/订阅系统

在WCF中,我们可以给service contract指定callbackContract来进行回调, 而回调接口由客户端实现。为了说明问题,我们设计了一个简单的scenario。

scenario description:

假设WCF service提供简单的AddTo(),即进行累积。客户端通过proxy消费这个service并将计算结果发布到所有注册了回调通道的其他客户端。

回调接口设计如下:

Code

服务接口如下:

复制代码
[ServiceContract(CallbackContract=typeof(ICaculatorCallBack),SessionMode=SessionMode.Required)]   
    
public interface ICaculatorService
    {
        [OperationContract(IsOneWay
=true)]
        
void AddTo(int n);

        [OperationContract(IsOneWay
=true)]
        
void Register();
    }
复制代码

服务类型设计如下:

 

Code

回调接口和服务契约非常简单,下面对serviceType作简单说明:

关于AddEventHandler:

当客户端调用AddTo这个服务的时候,服务器端开始计算,当计算完毕之后,然后开始广播并且调用各个客户端的回调实现。为了捕获计算完毕这个动作,因此我们必须定义一种类型的事件句柄并且申明相应类型的事件,因此本例中我们定义了一种AddEventHandle类型的事件OnAddCompleted

OnAddCompleted事件触发的时机:

那么OnAddCompleted事件是什么时候触发的呢?是在客户端消费AddTo服务的时候。 从AddTo implementation中我们可以看到:我们先将结算结果保存,并新建一个自定义事件,将计算结果保存至事件Args中,然后开始广播该事件(BroadAddEvent)。广播该事件的作用就是让所有注册了该事件(即消费了Register服务)的客户端开始调用其事件处理程序(CaculatorService_OnAddCompleted)。在该事件处理程序中,然后开始调用客户端的callbacb。

这就是整个利用callback机制进行广播的过程。

下面我们实现一个简单的客户端callback.如下:

Code

客户端1主程序如下:

Code

客户端2回调及主程序如下:

Code

运行screenshot如下:

 总结:

事件发布/订阅模型有着广泛应用,比如实时任务调度,多人在线游戏,即时聊天,软件版本的自动更新等等。只有你想不到,没有你做不到:)

欲下载本文源代码,请点击此处

posted on   飞天舞者  阅读(1632)  评论(2编辑  收藏  举报

编辑推荐:
· .NET Core 对象分配(Alloc)底层原理浅谈
· 聊一聊 C#异步 任务延续的三种底层玩法
· 敏捷开发:如何高效开每日站会
· 为什么 .NET8线程池 容易引发线程饥饿
· golang自带的死锁检测并非银弹
阅读排行:
· 2024年终总结:5000 Star,10w 下载量,这是我交出的开源答卷
· 一个适用于 .NET 的开源整洁架构项目模板
· AI Editor 真的被惊到了
· API 风格选对了,文档写好了,项目就成功了一半!
· 【开源】C#上位机必备高效数据转换助手

导航

< 2008年10月 >
28 29 30 1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31 1
2 3 4 5 6 7 8
For more information about me, feel free email to me winston.he@hotmail.com
点击右上角即可分享
微信分享提示