Чтобы обойти API потоковой передачи твиттеров, не имеющий файла междоменного доступа для доступа к нему со стороны клиента (в данном случае Silverlight), я сделал файл универсального обработчика в веб-проекте, который в основном загружает поток из твиттера и по мере его чтения, пишет это клиенту.
Вот код обработчика:
context.Response.Buffer = false;
context.Response.ContentType = "text/plain";
WebRequest request = WebRequest.Create("http://stream.twitter.com/1/statuses/filter.json?locations=-180,-90,180,90");
request.Credentials = new NetworkCredential("username", "password");
StreamReader responseStream = new StreamReader(request.GetResponse().GetResponseStream(), Encoding.GetEncoding("utf-8"));
while (!responseStream.EndOfStream)
{
string line = "(~!-/" + responseStream.ReadLine() + "~!-/)";
context.Response.BinaryWrite((Encoding.UTF8.GetBytes(line)));}
И это работает, но проблема в том, что, как только клиент отключает, обработчик просто продолжает загрузку. Так как мне узнать, занят ли клиент получением запроса, а если нет, завершить цикл while?
Кроме того, моя вторая проблема заключается в том, что на стороне клиента выполнение ReadLine () ничего не делает, предположительно потому, что он считает весь поток одной строкой, поэтому никогда не получает полный ответ. Чтобы обойти это, я читаю его побайтно, и когда он видит "(~! - /" вокруг чего-то, что он знает, что это одна строка. ОЧЕНЬ хак, я знаю.
Спасибо!