2009-04-15 29 views
2

URLからWebページのHTMLコンテンツの文字列を返すためにC#でメソッドを作成しようとしています。いくつかの異なる方法を試しましたが、エラーが発生しましたSystem.Net.WebException:基になる接続が閉じられました:受信時に予期しないエラーが発生しました。System.Net.WebException:基になる接続が閉じられました:受信時に予期しないエラーが発生しました

次は、ローカルで正常に動作しますが、リモートサーバー上で実行している場合、上記のエラーを取得します。それが持つマシン上でIEでURLを開くことで解決した前

public static string WebPageRead(string url) 
    { 
     string result = String.Empty; 

     WebResponse response = null; 
     StreamReader reader = null; 

     try 
     { 
      if (!String.IsNullOrEmpty(url)) 
      { 
       HttpWebRequest request = HttpWebRequest.Create(url) as HttpWebRequest; 
       request.Method = "GET"; 
       request.KeepAlive = false; 
       request.ProtocolVersion = HttpVersion.Version10; 

       response = request.GetResponse(); 
       reader = new StreamReader(response.GetResponseStream(), Encoding.UTF8); 
       result = reader.ReadToEnd(); 
      } 
     } 
     catch (Exception exc) 
     { 
      throw exc; 
     } 
     finally 
     { 
      if (reader != null) 
      { 
       reader.Close(); 
      } 

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

     return result; 
    } 
+0

問題のあるURLは、Webブラウザまたは別のHTTPクライアントを使用して要求できますか? Internet Explorer用に設定されたプロキシがありますか、またはリモートサーバーにNTLMなどの認証が必要ですか? – Lucero

答えて

1

応答のおかげで、問題はリモートサーバーのDNSの問題のためでした!確認するために、私は最後に次のコードを使いました:

public static string WebPageRead(string url) 
    { 
     string content = String.Empty; 

     if (!String.IsNullOrEmpty(url)) 
     { 
      HttpWebRequest request = HttpWebRequest.Create(url) as HttpWebRequest; 

      if (request != null) 
      { 
       request.Method = "GET"; 
       request.KeepAlive = false; 
       request.ProtocolVersion = HttpVersion.Version10; 

       try 
       { 
        using (WebResponse response = request.GetResponse()) 
        { 
         using (Stream stream = response.GetResponseStream()) 
         { 
          using (StreamReader reader = new StreamReader(stream, Encoding.UTF8)) 
          { 
           content = reader.ReadToEnd(); 
          } 
         } 
        } 
       } 
       catch (Exception exc) 
       { 
        throw exc; 
       } 
      } 
     }      

     return content; 
    } 
+2

私はDNSの問題が何か不思議ですか?私はdevのマシンで同じエラーが発生しているが、同じコードと設定ファイルにもかかわらず、私たちのprodマシンではない。 –

+0

あなたのコードからこのエラーを受け取ったので、上記の問題をどのように解決しましたか? – Hamid

0

は、このような問題を抱えていました問題。 IEは、セキュアサイトのリストにURLを追加するかどうかを尋ねます。それを追加すると、そのURLのために動作します。

これは考えられる原因の1つに過ぎません。真剣に他の多くの問題がこれを引き起こす可能性があります。上記の問題のほかに、私がこれを解決するために見つけた最良の方法は、例外をキャッチしてリクエストを再試行することです。

2

これはおそらく問題ではありませんが、次のことを試してください。

public static string WebPageRead(string url) 
{ 
    if (String.IsNullOrEmpty(url)) 
    { 
     return null; 
    } 

    HttpWebRequest request = HttpWebRequest.Create(url) as HttpWebRequest; 
    if (request == null) 
    { 
     return null; 
    } 

    request.Method = "GET"; 
    request.KeepAlive = false; 
    request.ProtocolVersion = HttpVersion.Version10; 

    using (WebResponse response = request.GetResponse()) 
    { 
     using (Stream stream = response.GetResponseStream()) 
     { 
      using (StreamReader reader = 
         new StreamReader(stream, Encoding.UTF8)) 
      { 
       return reader.ReadToEnd(); 
      } 
     } 
    } 
} 

私はあなたが知られて良いURLでこれを試してみてください示唆以前の答えをエコー。バージョンを1.0に設定する行をコメントアウトして、既知の良いHTTP 1.1 URLでこれを試してください。それがうまくいくと、物事をかなり狭めることになります。

関連する問題