2010-09-18 16 views
6

Me pregunto cómo leeré una conexión persistente con HttpWebRequest y HttpWebResponse. El problema parece ser que la función GetResponseStream() espera que la conexión del servidor se cierre antes de volver.C# HttpWebResponse Comet problema

¿Hay una manera alternativa fácil de leer una conexión de cometa? Ejemplo que no funciona.

// 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

¿Cómo sabes que GetResponseStream() espera a que se cierre la conexión? – feroze

Respuesta

8

Hay pocas razones para usar HttpWebRequest si se puede usar en lugar WebClient. Eche un vistazo al WebClient.OpenRead Method. Estoy utilizando con éxito a leer de una respuesta HTTP infinita como esto:

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); 
    } 
} 

Nota, sin embargo, que el punto de "largo de votación" es por lo general no enviar un flujo continuo de datos, pero retrasar la respuesta hasta que ocurra algún evento, en cuyo caso se envía la respuesta y se cierra la conexión. Entonces, lo que estás viendo podría ser simplemente que Comet funcione según lo previsto.