2009-07-21 72 views
1

我有一個winform應用程序,需要知道SQL服務器何時可用以允許合併同步功能。我嘗試了一下以下的變體,這些變體都是一次性的,但我想提出一些更有活力的東西。網絡狀態的實時監控。哪些事件被提出?

下面的函數(謝謝你Alex_L)正在檢查SQL運行的1433端口,並且效果很好。我試圖完成的是一種實時監控這種方式。我需要創建一個Windows服務嗎?網絡連接更改等其他網絡事件呢?

這個有時連接的應用程序的用法很簡單。如果他們在我們的網絡上,則合併複製部分可用。如果他們不在我們的網絡上,那麼它不是。 SQL Server不應該可用於我們的網絡,它應該在啓用時始終可用。這就是說,我會開放解決方案,探索我們當前的網絡,而不是SQL實例。

 private static bool IsSqlAvailable() 
     { 
      TcpClient tcpc = new TcpClient(); 
      try 
       { 
       tcpc.Connect("10.250.50.30", 1433); 
       return true; 
       } 
      catch 
       { 
       return false; 
       } 
     } 

回答

2

您可以檢查的SQL Server的端口1433(或其他,如果使用的話):

TcpClient tcpc = new TcpClient(); 
try 
{ 
    tcpc.Connect("10.250.50.30", 1433); 
    return true; 
} 
catch 
{ 
    return false; 
} 
1

我可能會用第二種方法,加入檢查各種數據庫屬性,以確保它是安全的寫入。

http://msdn.microsoft.com/en-us/library/ms176049.aspx

好了B計劃以響應下面的評論: 有您的SQL服務器發送某種「心跳」到你的主應用程序(Ping或什麼,由你)。您可以讓您的應用程序運行一個單獨的線程,以每X秒鐘檢測一次心跳。如果你停止接收心跳,那麼你沒有連接到服務器來運行合併。

+0

我將如何使用它來實現動態檢查?這就是我想問的問題(也許很糟糕)。我希望程序在運行時知道連接何時可用,而不是在啓動時運行。 – 2009-07-21 13:58:34

+0

謝謝你的迴應。這是一個可行的選擇與200個斷開連接的用戶?讓我們的生產服務器ping 200個用戶?此外,我們使用動態DNS,所以IP的變化,但我想你可以通過HOSTNAME ping通。我無法相信本地系統無法監控連接嗎?即使只是查看他們目前是否在我們的網絡上。當連接狀態發生變化時,我一定會想到一定會有事件發生。 – 2009-07-21 14:20:27

2

我有我的博客上顯示how to detect network availability changes的條目。當IP接口地址映射表發生變化時,它使用NotifyAddrChange windows API來引發一個託管事件。由於這些更改與網絡可用性更改(電纜插入,WiFi連接,VPN連接,撥號,3G撥號等)相關,您可以使用該事件來測試服務器可用性並開始同步。