zoukankan      html  css  js  c++  java
  • 如何利用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如下:

     总结:

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

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

  • 相关阅读:
    [转]Android SDK更新 Connection to http://dl-ssl.google.com refused 解决方法
    web学习之Django--安装
    P21(系列四) 线性分类9-朴素贝叶斯分类器(Naive Bayes Classifer)===todo
    P20(系列四) 线性分类8-高斯判别分析(Gaussian Discriminant Analysis)-模型求解(求协方差)===todo
    P19(系列四) 线性分类7-高斯判别分析(Gaussian Discriminant Analysis)-模型求解(求期望)===todo
    P18(系列四) 线性分类7-高斯判别分析(Gaussian Discriminant Analysis)-模型求解(求期望)
    P18(系列四) 线性分类6-高斯判别分析(Gaussian Discriminant Analysis)-模型定义===todo
    P17(系列四) 线性分类5-逻辑回归(Logistic Regression)===todo
    科技竞争的时代已经来临,科技人才如何把握机遇?
    Java与Kotlin, 哪个是开发安卓应用的首选语言?
  • 原文地址:https://www.cnblogs.com/Winston/p/1323866.html
Copyright © 2011-2022 走看看