2010-09-18 4 views
6

Je me demande comment j'irais lire une connexion persistante avec HttpWebRequest et HttpWebResponse. Le problème semble être que la fonction GetResponseStream() attend la fermeture de la connexion au serveur avant de retourner.C# HttpWebResponse Problème de comète

Existe-t-il un autre moyen facile de lire une connexion de comète? Exemple qui ne fonctionne pas.

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

Comment savez-vous que GetResponseStream() attend la fermeture de la connexion? – feroze

Répondre

8

Il y a peu de raisons d'utiliser HttpWebRequest si vous pouvez utiliser WebClient à la place. Jetez un oeil à la WebClient.OpenRead Method. J'utilise avec succès pour lire une réponse HTTP infinie comme ceci:

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

Remarque, cependant, que le point de « long polling » est généralement pas d'envoyer un flux continu de données, mais pour retarder la réponse jusqu'à ce qu'un événement survienne, auquel cas la réponse est envoyée et la connexion fermée. Donc ce que vous voyez pourrait simplement être Comet fonctionnant comme prévu.