2012-03-03 378 views
1

私は、サーバーに接続し、そこから別の情報を取得するクライアントアプリケーションを開発します。それはマルチスレッドのアプリです。いくつかのスレッドで起動すると完璧に動作します。 は、それまでの間、次のメッセージで例外をスロースタート:HttpWebRequest:リモートサーバーに接続できません

私はTCPViewを使用しましたし、私のクライアントアプリケーションについては何も見つけることができません

「リモートサーバーに接続できません」。だから、 "Unable to Connect"を返すと、http接続も開けません。

なぜ接続が開かれないのでしょうか?

おかげで、

EDIT:数分のスレッドがでサイクルに取得した後

HttpWebResponse response = null; 
     Stream resStream = null; 
     StreamReader reader = null; 
     string res = "";    
     try 
     { 
      HttpWebRequest request = (HttpWebRequest) 
       WebRequest.Create(requestUrl); 
      if (cookies_ == null) 
      { 
       cookies_ = new CookieContainer(); 
      } 
      request.Timeout = timeoutVal_; 
      request.ReadWriteTimeout = timeoutVal_ * 2; 
      request.KeepAlive = false; 

      if (bUseCookies) 
      { 
       request.CookieContainer = cookies_; 
      } 

      // execute the request 
      response = (HttpWebResponse) 
       request.GetResponse(); 

      resStream = response.GetResponseStream(); 
      reader = new StreamReader(resStream); 
      res = reader.ReadToEnd(); 
     } 
     catch (Exception ex) 
     { 
      throw new Exception(siteToken + " " + ex.Message); 
     } 
     finally 
     { 
      if (response != null) 
       response.Close(); 

      if (resStream != null) 
       resStream.Close(); 

      if (reader != null) 
      { 
       reader.Close(); 
      } 
     } 

     return res; 

:ここ

は、私がページのコンテンツをfecthするために複数のスレッドで使用しているコードです。タイムアウト例外またはサーバーに接続できません。

私がFiddlerを起動すると、接続が再度アクティブになり、しばらくの間スレッドが動作し続けるという奇妙なことが起こります。フィドラーはこの問題をどのように修正しますか?

+0

答え:それはデバッガのためのものです。本当の答え:サーバーに接続できない場合は、TCPViewでOPENと表示されません。私たちは、少なくとも何が起こっているのか理解するのに役立つコードを見る必要があります。 –

答えて

0

プロキシ経由でインターネットに接続していて、IEのLAN設定を確認している可能性があります。 C#からプロキシ設定を追加する必要があります。

var request = (HttpWebRequest)WebRequest.CreateHttp(url); 
        WebProxy proxy = new WebProxy("http://127.0.0.1:8888", true); 
        proxy.Credentials = new NetworkCredential("user", "pwd", "ADomain"); 
        request.Proxy = proxy; 
        request.Credentials = System.Net.CredentialCache.DefaultNetworkCredentials; 

        request.Timeout = 1000 * 60 * 5; 
        request.Method = method; 
        request.Headers.Add("DAUTH", dauth);request.GetResponse(); 
関連する問題