Поток текста на клиент через обработчик ASP.NET - PullRequest
1 голос
/ 30 апреля 2011

Чтобы обойти 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 () ничего не делает, предположительно потому, что он считает весь поток одной строкой, поэтому никогда не получает полный ответ. Чтобы обойти это, я читаю его побайтно, и когда он видит "(~! - /" вокруг чего-то, что он знает, что это одна строка. ОЧЕНЬ хак, я знаю.

Спасибо!

1 Ответ

0 голосов
/ 01 мая 2011

Нашел ответ!

while (context.Response.IsClientConnected)

:)

...