निम्नलिखित समारोह ट्विटर firehose से पहले एक्स संदेशों नीचे खींच जाएगा, लेकिन WebResponse ब्लॉक की तरह दिखता है और समारोह बाहर निकल जाता है कभी नहीं:ट्विटर फ़ायरहोज स्ट्रीम पढ़ने पर WebResponse कभी खत्म क्यों नहीं होता है?
public void GetStatusesFromStream(string username, string password, int nMessageCount)
{
WebRequest request = WebRequest.Create("http://stream.twitter.com/1/statuses/sample.json");
request.Credentials = new NetworkCredential(username, password);
using (WebResponse response = request.GetResponse())
{
using (var stream = response.GetResponseStream())
{
using (var reader = new StreamReader(stream))
{
while (!reader.EndOfStream)
{
Console.WriteLine(reader.ReadLine());
if (nMessageCount-- < 0)
break;
}
Console.WriteLine("Start iDispose");
}
Console.WriteLine("Never gets here!!!");
}
}
Console.WriteLine("Done - press a key to exit");
Console.ReadLine();
}
लेकिन निम्नलिखित ठीक काम करता है:
public void GetStatusesFromStreamOK(string username, string password, int nMessageCount)
{
byte[] encbuff = System.Text.Encoding.UTF8.GetBytes(username + ":" + password);
//request.Headers.Add("Authorization", "Basic " + Convert.ToBase64String(encbuff));
string requestString = "GET /1/statuses/sample.json HTTP/1.1\r\n";
requestString += "Authorization: " + "Basic " + Convert.ToBase64String(encbuff) + "\r\n";
requestString += "Host: stream.twitter.com\r\n";
requestString += "Connection: keep-alive\r\n";
requestString += "\r\n";
using (TcpClient client = new TcpClient())
{
client.Connect("stream.twitter.com", 80);
using (NetworkStream stream = client.GetStream())
{
// Send the request.
StreamWriter writer = new StreamWriter(stream);
writer.Write(requestString);
writer.Flush();
// Process the response.
StreamReader rdr = new StreamReader(stream);
while (!rdr.EndOfStream)
{
Console.WriteLine(rdr.ReadLine());
if (nMessageCount-- < 0)
break;
}
}
}
Console.WriteLine("Done - press a key to exit");
Console.ReadLine();
}
मैं क्या कर रहा हूँ गलत?
क्या आपको पता है कि यह कहां लटका हुआ है? क्या आप एक डीबगर संलग्न कर सकते हैं और एक स्टैक ट्रेस प्राप्त कर सकते हैं? ऑफहैंड, आपके कोड में कुछ भी गलत नहीं है। हो सकता है कि सर्वर गलत व्यवहार कर रहा है, या StreamReader में एक बग है। कवर के तहत क्या हो रहा है यह जानने के लिए आप http://ferozedaud.blogspot.com/2009/08/tracing-with-systemnet.html में तकनीकों का उपयोग कर सकते हैं। यह एक अच्छा प्रारंभिक बिंदु होगा। – feroze
यदि मैं उपयोग कथन को हटाता हूं और reader.close() के साथ प्रतिस्थापित करता हूं, तो मुझे एक ही समस्या दिखाई देती है, और नेटवर्क मॉनिटर दिखाता है कि ऐप अभी भी डेटा प्राप्त कर रहा है लेकिन reader.close() से वापस नहीं लौटा रहा है। पीएस - विस्टा पर केवल परीक्षण व्यवहार। – martimedia
मैं इसे पुन: पेश नहीं कर सकता (विंडोज 7 64 बिट पर वीएस 2008)। यह पूरी तरह से ठीक काम कर रहा है ... –