2010-09-18 19 views
6

HttpWebRequest ve HttpWebResponse ile kalıcı bir bağlantı okumaya nasıl gideceğimi merak ediyorum. Sorun, GetResponseStream() işlevinin sunucu bağlantısının dönmeden önce kapatılmasını beklemesi gibi görünüyor.C# HttpWebResponse Comet problem

Kuyruklu yıldız bağlantısını okumak için kolay bir yol var mı? Çalışmıyor örnek .

// 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() bağlantısının kapatılmasını beklediğini nereden biliyorsunuz? – feroze

cevap

8

yerine WebClient kullanabilirsiniz eğer HttpWebRequest kullanmak için çok az sebep yoktur. WebClient.OpenRead Method'a bir göz atın. Ben başarıyla Böyle sonsuz bir HTTP yanıtı okumak için kullanıyorum:

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

Not, ancak, "uzun çağırma" noktası genellikle olduğu verilerin sürekli akışı göndermek istemem, ama Bazı olay gerçekleşene kadar yanıtı ertelemek için, bu durumda yanıt gönderilir ve bağlantı kapatılır. Gördüğünüz şey basitçe Comet'in amaçlandığı gibi çalışabilmesi olabilir.