2011-07-08 12 views
0

コンピュータがファイアウォールに接続されているかどうかをテストするには、このファイアウォールのloginwebpageが開くかどうかを確認します。タイムアウトすると、エラー処理によって接続が開かれた(または、私たちの場合のように証明書のエラーがスローされます)と、接続されていないことがわかります。C# - インターネットページのテスト - タイムアウト待ち

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; 
      } 
     } 

    } 

このプロセスの大きな問題は、我々がすでに接続されている時はいつでも、アプリケーションが出て、Webページの時間までハングこと..です

任意の入力は大歓迎以上のものです、ここで私が使用したコードですC# - Socket to log on to Firewall

0123:私は、私はるかに良いが、URLの代わりにIPを経由して、この接続を作成することができますソケット接続を発見した一方

更新たぶん仕事ができるのBackgroundWorkerを使用して

答えて

2

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

関連する問題