2010-09-18 5 views
6

Мне интересно, как я буду читать постоянное соединение с HttpWebRequest и HttpWebResponse. Кажется, что проблема заключается в том, что функция GetResponseStream() ожидает завершения подключения к серверу перед возвратом.C# HttpWebResponse Проблема кометы

Есть ли альтернативный простой способ прочитать кометное соединение? Пример, который не работает.

// 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? 
+0

Как вы узнали, что GetResponseStream() ожидает, что соединение будет закрыто? – feroze

ответ

8

Существует мало оснований использовать HttpWebRequest, если вы можете использовать вместо WebClient. Посмотрите на 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 работает по назначению.

Смежные вопросы