asp.net httphandler中的异步Web请求

时间:2011-02-02 03:06:10

标签: c# asp.net asynchronous httphandler

我有以下情况,如果可能的话,我希望得到一些澄清。

我有一个javascript函数,它对处理程序(.ashx)文件进行ajax调用。 javascript函数不需要返回值。处理程序将发布一些数据并完成。处理程序文件向Bitly,Facebook和Twitter发出ASYNC Web请求(不按此顺序)。我的想法解决方案是让处理程序对Bitly(bit.ly)进行ASYNC调用,得到结果,然后在不同的线程上同时发布到Twitter和Facebook,因为它们彼此独立。

我在质疑的是WaitHandle。我应该使用这个,因为处理程序在用户操作之外运行,或者回调方法是否足够?如果在返回之前没有调用保持当前线程,处理程序文件是否仍在侦听回调?如果我确实需要让线程等待回调,我仍然可以获得使ASYNC Web请求看到原始线程仍在等待或挂起的好处吗?

我有点理解这是如何工作的,但不能完全把它们放在一起。

注意:句柄不用于拦截Web请求。我正在使用处理程序来处理ajax帖子。我直接打电话给处理程序。

1 个答案:

答案 0 :(得分:0)

我不会为此使用异步处理程序。由于您没有返回结果,因此使用异步处理程序是非常浪费的。在正在执行的任务运行时间相对较长的情况下,您需要使用Aysnc处理程序,并且必须将此任务的结果作为对等待线程和最终浏览器的响应发回。

在您的情况下,您应该使用辅助流程或MSMQ来完成工作。一个简单的解决方案是将数据发布到表中,并让另一个进程处理这些记录。 MSMQ非常适合这些情况,因为排队消息只需要几分之一秒,处理这些消息的过程可以使用它自己的甜蜜时间,而不会对ASP.NET Web应用程序/站点产生任何不良影响。您可以像这样获得网站的大量可扩展性。

要回答关于WaitHandle的问题(如果你一直想要走这条路线),不管你不应该使用等待句柄,你应该将它用作真正的异步非阻塞处理程序。 WaitHandle会阻止。

无法保证处理程序在整个过程中都处于活动状态。您的工作进程可以在此期间重置。所有更多的理由不作为异步处理程序,而是作为“带外”异步作业。通过带外,我的意思是与ASP.NET应用程序不在同一个进程中。