Dan*_*don 3 asp.net asp.net-mvc streaming asp.net-mvc-4
我试图弄清楚如何让 ASP.net MVC 4 在长时间运行的操作期间将数据发送回浏览器。因为我以前从未这样做过,所以我从一个简单的例子开始:
public void Index()
{
Response.Write("<p>Hello, world! Counting to 5!</p>");
for (int i = 0; i < 5; i++)
{
Thread.Sleep(1000);
Response.Write("<p>" + i + "</p>");
Response.Flush();
}
}
Run Code Online (Sandbox Code Playgroud)
我认为这段代码应该立即发送“你好,世界!数到 5!” 到浏览器,然后每秒发送一位,直到达到五。
但是,当我运行此代码时,它需要五秒钟的时间,并且所有文本都会一次输出。
我认为 Response.Flush() 方法应该允许您以增量方式将数据发送到浏览器。
我怎样才能使这项工作?
我找到了我的问题的答案。
首先,如果 Internet Explorer 没有看到文档是有效的 HTML,它似乎不会流式传输文本。我添加了代码来打印出围绕我的数据的准系统 HTML 页面,这似乎使它起作用了。
另一位作者在这里写道:http : //encosia.com/easy-incremental-status-updates-for-long-requests/ Internet Explorer 会自动缓冲输入的前 256 个字符,因此建议放入 256 个字符的 throw-一开始就删除数据,但这似乎对我正在使用的版本(IE 10)没有影响。
最后,我只数到四,因为我差一分;-)
这是我的工作代码:
public void Index()
{
Response.Write("<!DOCTYPE html><html><head><title>Test</title></head><body>");
Response.Write("<!--");
Response.Write(new string('*', 256));
Response.Write("-->");
Response.Flush();
Response.Write("<p>Hello, world! Counting to 5!</p>");
for (int i = 1; i <= 5; i++)
{
Response.Flush();
Response.Write("<p>" + i + "</p>");
Thread.Sleep(1000);
}
Response.Write("</body></html>");
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1821 次 |
| 最近记录: |