C # Проблема кометы HttpWebResponse

Мне интересно, как я буду читать постоянное соединение с 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?

person Kosaki    schedule 18.09.2010    source источник
comment
Откуда вы знаете, что GetResponseStream() ожидает закрытия соединения?   -  person feroze    schedule 19.09.2010


Ответы (1)


Нет особых причин использовать HttpWebRequest, если вы можете использовать WebClient. Ознакомьтесь с методом WebClient.OpenRead. Я успешно использую его для чтения бесконечного 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);
    }
}

Обратите внимание, однако, что смысл «долгого опроса» обычно заключается не в отправке непрерывного потока данных, а в задержке ответа до тех пор, пока не произойдет какое-либо событие, и в этом случае ответ отправляется, а соединение закрыто. Так что то, что вы видите, может быть просто кометой, работающей по назначению.

person dtb    schedule 18.09.2010