2017-05-30 51 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服務 - 只是爲了清除它。 –