1

我正在按照以下示例在 ASP.NET 4.5 中创建一个非常简单的 Comet。显示 Ajax 调用进度的最佳方式是什么?

我还从http://www.aaronlerch.com/blog/2007/07/08/creating-comet-applications-with-aspnet/下载了示例。我没有得到服务器的任何响应。

Response.Flush 在 ASp.NEt 4.5 中是否发生了变化?

更新:只需删除 Thread.Sleep,现在一切正常。

4

1 回答 1

0

我认为没有根本的改变只是添加异步刷新响应

异步刷新响应

当客户端距离较远或连接带宽较低时,向 HTTP 客户端发送响应可能需要相当长的时间。通常,ASP.NET 会在应用程序创建响应字节时对其进行缓冲。然后,ASP.NET 在请求处理的最后执行累积缓冲区的单个发送操作。

如果缓冲响应很大(例如,将大文件流式传输到客户端),则必须定期调用 HttpResponse.Flush 将缓冲输出发送到客户端并控制内存使用。但是,由于 Flush 是同步调用,因此在可能长时间运行的请求期间,迭代调用 Flush 仍会消耗一个线程。

ASP.NET 4.5 添加了对使用 HttpResponse 类的 BeginFlush 和 EndFlush 方法异步执行刷新的支持。使用这些方法,您可以创建异步模块和异步处理程序,以增量方式将数据发送到客户端,而不会占用操作系统线程。在 BeginFlush 和 EndFlush 调用之间,ASP.NET 释放当前线程。这大大减少了支持长时间运行的 HTTP 下载所需的活动线程总数。

于 2013-03-04T08:00:57.627 回答