Aşağıdaki fonksiyonu Heyecan itfaiye hortumu ilk X mesajları aşağı çekin, ancak WebResponse bloklar gibi görünüyor ve işlevini çıkar asla:Twitter Firehose akışını okurken WebResponse neden bitmiyor?
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();
}
Ama şu çalışıyor:
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();
}
yapıyorum ne yanlış?
public static 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);
WebResponse response = request.GetResponse();
{
var stream = response.GetResponseStream();
{
var reader = new StreamReader(stream);
{
while (!reader.EndOfStream)
{
Console.WriteLine(reader.ReadLine());
if (nMessageCount-- < 0)
break;
}
}
Console.WriteLine("Never gets here!!!");
}
}
Console.WriteLine("Done - press a key to exit");
Console.ReadLine();
}
Nerede takıldığını biliyor musunuz? Bir hata ayıklayıcı ekleyebilir ve yığın izini alabilir misiniz? Offhand, kodunuzda yanlış bir şey yok. Sunucunun hatalı davranması veya StreamReader'da bir hata olması olabilir. Kapaklar altında neler olduğunu öğrenmek için http://ferozedaud.blogspot.com/2009/08/tracing-with-systemnet.html adresindeki teknikleri kullanabilirsiniz. Bu iyi bir başlangıç noktası olurdu. – feroze
Kullanım ifadelerini kaldırırsam ve reader.close() ile değiştirirseniz, aynı sorunu görüyorum ve ağ izleyicisi uygulamanın hala veri aldığını ancak reader.close() uygulamasından dönmediğini gösteriyor. PS - Vista'da yalnızca test edilmiş davranış. – martimedia
Yeniden üretemiyorum (Windows 7 64bit'de VS 2008). Tamamen iyi çalışıyor ... –