2011-02-02 109 views
0

我有以下情况,并希望得到一些澄清,如果可能的话。在asp.net中的异步web请求httphandler

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

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

我有点理解这是假设工作,但不能完全把它放在一起。

注意:句柄不用于拦截Web请求。我正在使用处理程序来处理ajax文章。我直接调用处理程序。

回答

0

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

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

要回答你关于WaitHandle的问题(如果你想要走这条路线),不要使用waithandle,你应该使用它作为一个真正的异步非阻塞处理程序。 WaitHandle会阻塞。

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

+0

谢谢你的有用答复。我将研究一个MSMQ解决方案。 – Raimone 2011-02-03 04:07:36