1

キーワードに基づいて Twitter からツイートを読み取るアプリがあります。これらのキーワードは定期的に変更される可能性があり、その場合は、ストリームを閉じて再度開く必要があります。問題なくストリームを開くことができますが、そのストリームを閉じようとすると問題が発生します。コード例を次に示します。

        try
        {
            response = (HttpWebResponse)request.GetResponse();
            using (Stream stream = response.GetResponseStream())
            {
                using (StreamReader reader = new StreamReader(stream))
                {
                    WriteLogMessage("Stream open - entering loop");
                    while (true)
                    {
                        if (count == 10) break;
                        count++;

                        string tweet = reader.ReadLine();
                        Console.Write(tweet);
                    }

                    WriteLogMessage("Exited loop");
                }
                /**** Program seems to freeze and never gets past this point ****/
                WriteLogMessage("Reader disposed");
            }
            WriteLogMessage("Stream disposed");
        }
        catch (Exception ex)
        {
            WriteLogMessage(ex.Message);
        }
        finally
        {
            if (response != null)
                response.Dispose();
            WriteLogMessage("Response closed");
        }

このコードは、私の win7 (x64) マシンで問題なく動作します。ただし、サーバー 2008 またはサーバー 2012 (両方とも x64) に展開すると、このフリーズ動作が見られます。Twitter が必要とするヘッダー以外の HttpWebRequest にパラメーターを設定していません。何が起こっているのか考えている人はいますか?

4

1 に答える 1

2

私は時々これに出くわしました。理由はよくわかりませんが、ストリームはすべてを受信するまで開いたままにしたいと考えています。これは私にとって非常に問題になりrequest.Abort、ストリームを閉じる前に電話しました。たとえば、あなたのコードでは、次のように記述します。

    WriteLogMessage("Exited loop");
    request.Abort();
}

しばらく前にブログに書きました: http://www.informit.com/blogs/blog.aspx?uk=The-hanging-web-request

于 2013-03-28T22:51:37.413 に答える