6

HttpWebRequest および HttpWebResponse との永続的な接続をどのように読み取るのか疑問に思っています。問題は、GetResponseStream() 関数がサーバー接続が閉じられるのを待ってから戻ることにあるようです。

彗星のつながりを読み取る別の簡単な方法はありますか? 動かない例。

// get the response stream
        Stream resStream = response.GetResponseStream();

        string tempString = null;
        int count = 0;

        do
        {
            // fill our buffer
            count = resStream.Read(buf, 0, buf.Length);

            // as long as we read something we want to print it
            if (count != 0)
            {
                tempString = Encoding.ASCII.GetString(buf, 0, count);
                Debug.Write(tempString);
            }
        }
        while (true); // any more data to read?
4

1 に答える 1

8

代わりにWebClientを使用できるのであれば、HttpWebRequestを使用する理由はほとんどありません。WebClient.OpenRead Methodを見てください。私はそれを使用して、次のような無限の HTTP 応答から読み取ることに成功しています。

using (var client = new WebClient())
using (var reader = new StreamReader(client.OpenRead(uri), Encoding.UTF8, true))
{
    string line;
    while ((line = reader.ReadLine()) != null)
    {
        Console.WriteLine(line);
    }
}

ただし、「ロングポーリング」のポイントは、通常、データの連続ストリームを送信することではなく、何らかのイベントが発生するまで応答を遅らせることです。イベントが発生した場合、応答が送信され、接続が閉じられます。したがって、あなたが見ているのは、Comet が意図したとおりに機能しているだけかもしれません。

于 2010-09-18T17:28:20.030 に答える