你的位置:首页 > 软件开发 > ASP.net > 利用WCF的双工通讯实现一个简单的心跳监控系统

利用WCF的双工通讯实现一个简单的心跳监控系统

发布时间:2016-08-11 17:00:31
何为心跳监控系统?故名思义,就是监控某个或某些个程序的运行状态,就好比医院里面的心跳监视仪一样,能够随时显示病人的心跳情况。心跳监控的目的是什么?与医院里面的心跳监视仪目的类似,监控程序运行状态,一旦出现问题(比如:一些自动运行的服务、程序等突然停止运行了),那么心跳监控系统就能 ...

何为心跳监控系统?

故名思义,就是监控某个或某些个程序的运行状态,就好比医院里面的心跳监视仪一样,能够随时显示病人的心跳情况。

心跳监控的目的是什么?

与医院里面的心跳监视仪目的类似,监控程序运行状态,一旦出现问题(比如:一些自动运行的服务、程序等突然停止运行了),那么心跳监控系统就能“感知到”并及时的显示在监控界面上,同时可以通过微信、短信告之相关的人员,以便他们及时处理程序异常,从而避免一些自动运行的服务、程序等突然停止运行而造成的一系列损失

心跳监控系统实现的思路是怎样的?

核心技术:WCF的双工通讯

实现步骤:

1.定义WCF的服务契约接口以及回调接口,服务方法主要包括:Start(被监控的程序启动时调用,即通知监控系统,我已经启动了)、Stop(被监控的程序停止时调用,即通知监控系统,我已经停止了)、ReportRunning(被监控的程序运行中定时调用,即通知监控系统,我是正常的并在运行中,同时还起到检测监控系统是否在运行的一个功能,一举两得),回调服务方法应有:Listen(这个是给监控系统主动去定时回调被监控的程序(心跳),如果被监控的程序能正常的返回状态,那么就是正常的,否则有可能已经“死了”,这时监控系统就需要按照预设指令作出相应的操作,比如:监控主界面显示异常的程序,同时发送异常通知消息给相关人员)

2.建立一个心跳监控系统Winform项目,并实现WCF服务,即集成实现WCF服务宿主程序,同时每一个WCF服务方法均需关联界面,即:程序启动了、停止了、运行中均会在界面实时显示出来或做一些实时统计;

3.其它被监控的程序(指自动运行的服务、程序等)需要集成实现WCF回调接口及开启WCF服务通讯的功能;

心跳监控系统的运行顺序是怎样的?如何保证监控方与被监控方实时不间断通讯?

运行顺序:

1.开启心跳监控系统(即:同时开启WCF服务宿主程序),确保监控服务正常运行;

2.开启其它被监控的程序,确保开启客户端与监控系统的WCF双工通讯服务正常;

注意:一定要先开启心跳监控系统,否则其它被监控的程序因无法与监控系统的WCF双工通讯服务正常连接而报错或多次尝试重连;

保证监控方与被监控方实时不间断通讯:

在保证按照上面所说的运行顺序依次开启心跳监控系统,再开启其它被监控的程序,正常建立一次通讯后,后续只要任何一方出现通讯中断,均会自动尝试重连(主要是客户端重连,心跳监控系统除非停止运行,否则不会中断,若因停止运行造成双方通讯中断,只需重启心跳监控系统即可)

通讯模式:

推模式:被监控的程序通过主动的调用WCF服务方法:Start、Stop、ReportRunning 向心跳监控系统告之运行状态,若通讯失败,则自动尝试重连,直至连接成功;

拉模式:心跳监控系统主动回调Listen方法,向被监控的程序索取运行状态,若通讯失败,则会在指定时间内多次重试回调客户端,若客户端在规定的时间范围内仍无法返回消息,则视为客户端异常,那么心跳监控系统则会进行异常的处理;

实现源代码:

ProgramMonitor.Core 类库项目:主要是定义WCF服务的相关接口以及实现回调的接口(因为每个客户端都需实现一遍回调接口,故统一实现,客户端集成后直接可以用,简化集成客户端的开发成本),心跳监控系统及需要被监控的程序均需要依赖该DLL;

ProgramMonitor WINFORM项目:心跳监控系统

整个解决方案如下图示:

利用WCF的双工通讯实现一个简单的心跳监控系统

注:由于源代码相对较多,故不再一一说明,只对重点的代码作解释

ProgramMonitor.Core

IListenService:(心跳监控WCF服务契约接口)

using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.ServiceModel;namespace ProgramMonitor.Core{  [ServiceContract(Namespace = "http://www.zuowenjun.cn", SessionMode = SessionMode.Required, CallbackContract = typeof(IListenCall))]  public interface IListenService  {    [OperationContract(IsOneWay = true)]    void Start(ProgramInfo programInfo);    [OperationContract(IsOneWay = true)]    void Stop(get='_blank'>string programId);    [OperationContract(IsOneWay = true)]    void ReportRunning(ProgramInfo programInfo);  }}

原标题:利用WCF的双工通讯实现一个简单的心跳监控系统

关键词:wcf

wcf
*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们: admin#shaoqun.com (#换成@)。