【问题标题】:Async web request in asp.net httphandlerasp.net httphandler 中的异步网络请求
【发布时间】:2011-02-02 03:06:10
【问题描述】:

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

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

我要问的是 WaitHandle。由于处理程序在用户操作之外运行,我应该使用它还是回调方法就足够了?如果没有调用来保持当前线程直到它返回,处理程序文件是否仍会监听回调?如果我确实需要让线程等待回调,我是否仍然可以通过 ASYNC Web 请求看到原始线程仍在等待或挂起?

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

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

【问题讨论】:

    标签: c# asp.net asynchronous httphandler


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 感谢您的有用回复。我将研究一个 MSMQ 解决方案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-11-29
    • 1970-01-01
    • 2013-09-13
    • 2011-08-24
    • 1970-01-01
    • 1970-01-01
    • 2022-08-14
    相关资源
    最近更新 更多