2010-09-18 70 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 2010-09-19 00:34:51

回答

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按照預期工作。