Silverlight 4.0 通过处理程序ASP.NET将文本流式传输到客户端
为了避免twitters streaming API没有跨域文件从客户端访问它(在本例中为Silverlight),我在一个web项目中创建了一个通用处理程序文件,它基本上从twitters下载流,并在读取流时将其写入客户端。 以下是处理程序代码:Silverlight 4.0 通过处理程序ASP.NET将文本流式传输到客户端,silverlight-4.0,c#-4.0,handler,Silverlight 4.0,C# 4.0,Handler,为了避免twitters streaming API没有跨域文件从客户端访问它(在本例中为Silverlight),我在一个web项目中创建了一个通用处理程序文件,它基本上从twitters下载流,并在读取流时将其写入客户端。 以下是处理程序代码: context.Response.Buffer = false; context.Response.ContentType = "text/plain"; WebRequest request = WebReque
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()”什么都不做,大概是因为它将整个流计算为一行,所以永远不会得到完整的响应。为了解决这个问题,我一个字节一个字节地读它,当它看到“(~!-/”,它知道这是一行。我知道,非常粗糙
谢谢!找到答案了
while (context.Response.IsClientConnected)
:)