2017-05-30 55 views
0

这实际上并不是一个问题,但我有这样的要求,因此我需要在C#中编写一个Windows应用程序来监视我们所有的内部和外部系统。这些系统中有一些是网站,一些是Windows应用程序,它们不断地在包括soap api调用的数据库中传输数据。我的应用程序需要做的是监视这些系统,并在发生停机时间以及停机多久时通知相关用户。C# - Windows窗体应用程序监视器

我已经完成了使用SQL Server作为数据库管理系统的数据库设计,但是我在实现方面陷入困境。我可以用什么方法来实现这个目标? TCP/IP? 此应用程序应该每隔x秒运行一次。

我已经在一个枚举中创建了一些标志,它会在应用程序状态正常,处于错误状态或应该警告用户时不断检查应用程序状态。除此之外,我还创建了一个构造函数,它将通过DLL初始化服务监视器的所有组件。

事情是这样:

[Flags] 
    public enum ClientApplicationState 
    { 
     ERROR = 0, 
     WARNING = 1, 
     OK = 2 
    } 

/// <summary> 
/// Constructor which sets up and initalizes all the components for the Service Monitoring DLL 
/// </summary> 
/// <param name="applicationName">The Name Of The Application</param> 
/// <param name="port">The port on which to listen to</param> 
/// <param name="timerPeriod"> Optional time in milisecinds to overide the default update freq (default is 1000)</param> 
public ServiceMonitor(string applicationName, short port, int timerPeriod = 1000) 
{ 
    _messages = new List<string>(); 
    _state = ClientApplicationState.OK; 
    //TODO: Throw port exception 
    try 
    { 
     _monClient = new MonitoringClient(applicationName, ClientApplicationState.OK, "Starting Up", 
      Process.GetCurrentProcess().ProcessName, port); 
    } 
    catch (Exception e) 
    { 

    } 
    InitTimer(timerPeriod); 
    _updateTimer.Enabled = true; 
} 

的网站托管和是活和Windows应用我们的Windows 2012 R2服务器上运行。

我该如何解决这个问题?

回答

0

您的问题太笼统,无法回答。但我认为你需要真正看看你打算监视的“事物”。然后你需要了解服务(如果这是你想采取的方法 - 这似乎是适当的)。

服务启动并持续运行(逻辑)。你的想法是“每x秒”都有点误导。您可能希望您的服务每隔x秒“检查一次”,但不要将该想法与应用程序执行混淆。当然,您应该能够配置该频率 - 您应该计划的另一个功能。

说实话,我并没有真正看到数据库的目的。根据我阅读的内容,我建议你停止考虑实施并开始考虑整个服务。在这个时间点你存储数据的地方是无关紧要的。您需要决定服务的功能(和“监控停机时间”是一个非常过时的要求),它执行此服务的“事情”以及它将如何响应。当你的服务停止时会发生什么?你监视显示器吗?谁将安装/配置它?它会在运行时提供任何信息吗?等等。

在你走得更远之前,你似乎需要写出一个相当复杂的服务/系统。 MS(和其他人)已经完成的事情 - 如MS运营经理https://technet.microsoft.com/library/hh230741.aspx。如果您要重新发明轮子(至少部分),那么它可以帮助您查看文档,了解其功能,配置方式,背后的概念等。

+0

我觉得这个词“服务”在语境之外被轻微误解。我需要监控的应用程序不是Windows服务,也不是我应该写一个Windows服务 - 只是为了清除它。 –