2011-01-15 12 views
2

C#HTTTWebRequestを使用してWebページをクロールするプログラムを作成しています。特定のURLの更新を監視する必要があるため、次のようにコードを記述します。しかし、私は2回だけ回答を得ることができることに気づいた。その後、それは応答を得ていない。期間を1分に延長しても、私はまだ同じ問題を抱えています。なぜか分からない。あなたは私に手を差し伸べることができますか?本当にありがとう!C#HTTPWebRequestを使用してURLに定期的にアクセスすることはできませんか?

GreatFree

while (true) 
{ 
    WebRequest http = HttpWebRequest.Create("http://www.sina.com.cn"); 
    HttpWebResponse response = (HttpWebResponse)http.GetResponse(); 
    Console.WriteLine(response.LastModified); 
    Thread.Sleep(5000); 
} 
+0

「回答がありません」とはどういう意味ですか?例外、空の応答ストリーム、HTTPエラーがありますか? – GvS

+0

タイムアウト例外が発生するまで、スレッドはHttpWebResponse response =(HttpWebResponse)http.GetResponse()行でブロックされます。 –

答えて

5

あなたはresposeでの作業finishiedまたは

+0

私はあなたの答えに感謝します! –

7

imaximchukの答えが正しいですが、それが理由を説明しませんそれを自動的に閉じるようにusing(HttpWebResponse response ...を使用しているときは、response.Close()を呼び出す必要があります。

HTTP接続がプールされます。新しい接続が利用可能であれば、1つの接続が再利用され、Web応答を閉じたり廃棄したりするときに接続がプールに返されます。あなたのケースでは、応答を閉じたり廃棄したりしていないので、プールに戻されていません。特定のホストへの最大接続数は設定可能ですが、通常は変更しないでください。デフォルトでは2つの接続があります。そのため、2つの動作中の応答とタイムアウトが表示されます。

最終的にが存在し、関連オブジェクトがガベージコレクションに適格であることに気づいたときに接続を解放すると考えられますが、それは非決定的です。

基本的に:ウェブ応答を常に閉じます。usingステートメントを使用するのが理想的です。

while (true) 
{ 
    WebRequest http = WebRequest.Create("http://www.sina.com.cn"); 
    using (HttpWebResponse response = (HttpWebResponse)http.GetResponse()) 
    { 
     Console.WriteLine(response.LastModified); 
    } 
    Thread.Sleep(5000); 
} 
+0

私はあなたの答えに感謝します! –

関連する問題