Async .aspx页面

时间:2009-12-12 18:37:22

标签: asp.net ajax

似乎异步HTTP处理程序比同步HTTP处理程序更好地扩展。但是.aspx页面可以由异步处理程序处理吗?如果是这样,怎么样?或者只有一个人需要使用ajax来实现它?

3 个答案:

答案 0 :(得分:2)

异步HttpHandlers可以与入站IIS / ASP.NET进程线程断开连接,因此在创建异步处理程序(或使用其中一个异步ASP.NET页面机制)时,不会占用ASP.NET请求队列。这对于同时处理大量请求的超大容量站点非常有用。

异步处理程序适用于IO绑定操作(调用Web服务,等待SQL Server运行长查询),其中应用程序只是等待结果返回。但是,如果您的aysnc任务是CPU密集型的,则不会对您造成太大影响,因为CPU负载未从机器卸载。如果您的异步任务需要很长时间才能运行,它们也无法正常工作,因为请求只是挂起。对于操作需要一段时间的更多交互式UI,AJAX和轮询是首选方法 - 或者其他一些让用户知道任务已完成的回调机制(电子邮件或基于应用程序的通知)。

对于要卸载的CPU密集型任务,您必须构建一个Application Server类型的体系结构,您可以将处理卸载到另一台计算机并查询进度,或者使用其他一些通知机制让您了解进度并返回最终结果。

我在这里有两个方法的幻灯片和示例(仅针对页面异步,通过样本中提供的自定义组件卸载):

http://www.west-wind.com/Weblog/posts/543251.aspx (转到帖子“处理ASP.NET中的长时间运行请求”

答案 1 :(得分:1)

当您运行相对较长的I / O绑定任务(从网络,磁盘,数据库,Web服务等中获取内容)并且您不希望拥有线程池线程时,异步HTTP处理程序可以帮助实现可伸缩性在他们等待完成这些任务时被阻止。在其他情况下,他们无济于事。它们不会神奇地使您的应用程序更快。您可以通过实现IHttpAsyncHandler接口来创建异步处理程序。

答案 2 :(得分:1)

Page对象(处理.aspx页面) HttpHandler。您可以通过在Async指令中设置Page属性来将其配置为使用async。然后遵循代码中的一个异步代码模式。例如:

protected void Page_Load(object sender, EventArgs e)
{
    PageAsyncTask pat =
        new PageAsyncTask(BeginAsync, EndAsync, null, null, true);
    this.RegisterAsyncTask(pat);
}