为了解决twitters流API不具有跨域文件从客户端访问它(在本例中为Silverlight)我在Web项目中创建了一个Generic Handler文件,该文件基本上从twitter下载流并且当它读取时,将它写入客户端。 这是处理程序代码:
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()”什么都不做,大概是因为它将整个流计为一行,所以永远不会得到完整的响应。为了解决这个问题,我逐字节地阅读它,当它看到“(〜! - /”周围的东西时,它知道这是一条线。非常hacky,我知道。
谢谢!
答案 0 :(得分:0)
找到了答案!
while (context.Response.IsClientConnected)
:)