2011-07-08 58 views
0

要測試我們的計算機是否連接到防火牆,我們檢查是否打開此防火牆的loginweb頁面。如果超時,錯誤處理將會說它已經連接,如果它打開(或者像我們的情況那樣拋出證書錯誤),我們知道我們沒有連接。C# - 測試Internet頁面 - 等待超時

的大問題,這個過程是每當我們已經連接,應用程序掛起,直到網頁超時..

任何輸入更受歡迎,這是我使用的代碼:

public static bool FirewallConnectivityStatus(string url) 
    { 
     try 
     { 
      HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url); 
      request.Proxy = null; 
      HttpWebResponse response = (HttpWebResponse)request.GetResponse(); 

      if (HttpStatusCode.OK == response.StatusCode) 
      { 
       response.Close(); 
       return false; 
      } 
      else 
      { 
       return true; 
      } 


     } 
     catch (WebException Ex) 
     { 
      if (Ex.Status == WebExceptionStatus.TrustFailure) 
      { 
       return false; 
      } 
      else 
      { 
       return true; 
      } 
     } 

    } 

更新 在此期間,我發現一個套接字連接,讓我更好的創建在URL代替通過IP此連接:C# - Socket to log on to Firewall

回答

2

也許用一個BackgroundWorker可以工作:

http://msdn.microsoft.com/en-us/library/system.componentmodel.backgroundworker.aspx

他們有一個頁面上相當不錯的例子。我從來沒有想過要試試這個。我想不出一個簡單的方法來測試它。它看起來像它之前還有被問:

C# API to test if a network Adapter is firewalled

至少後臺工作可以讓在等待超時你的程序繼續進行。這隻取決於您是否可以讓應用程序繼續運行,而無需回答即可進行測試。

如何縮短超時時間? http://msdn.microsoft.com/en-us/library/system.net.httpwebrequest.timeout.aspx

+0

背景工作者似乎是優雅地進行應用程序的唯一方法。感謝您的輸入 – XikiryoX