2010-09-18 31 views
6

Tôi tự hỏi làm thế nào tôi sẽ đi về việc đọc một kết nối liên tục với HttpWebRequest và HttpWebResponse. Vấn đề có vẻ là hàm GetResponseStream() chờ kết nối máy chủ được đóng trước khi trở về.C# HttpWebResponse Vấn đề sao chổi

Có cách nào khác dễ dàng để đọc kết nối sao chổi không? Ví dụ không hoạt động.

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

Làm thế nào để bạn biết rằng GetResponseStream() chờ kết nối được đóng? – feroze

Trả lời

8

Có ít lý do để sử dụng HttpWebRequest nếu bạn có thể sử dụng WebClient thay thế. Hãy xem WebClient.OpenRead Method. Tôi thành công sử dụng nó để đọc từ một phản ứng HTTP vô hạn như thế này:

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

Note, tuy nhiên, quan điểm "dài bỏ phiếu" thường không phải là để gửi một dòng liên tục của dữ liệu, nhưng để trì hoãn đáp ứng cho đến khi xảy ra một số sự kiện, trong trường hợp đó phản hồi được gửi và kết nối đã đóng. Vì vậy, những gì bạn đang thấy có thể chỉ đơn giản là Comet làm việc như dự định.