【问题标题】:Handling multiple $.ajax calls simultaneously in .ashx在 .ashx 中同时处理多个 $.ajax 调用
【发布时间】:2013-09-02 13:08:11
【问题描述】:

我的 GenericHandler.ashx 中有以下方法:

private void T1()
{
    System.Threading.Thread.Sleep(2000);
    Ctx.Response.Write(Serializer.Serialize(new { foo = "bar" }));
}

如果我同时对处理程序进行 2 次 $.ajax-calls,我将在 2 秒后获得第一个响应,然后在 4 秒后获得下一个响应。

有什么方法可以让我的 GenericHandler.ashx 同时处理两个 ajax 调用?

【问题讨论】:

  • 你是认真的 Sleeping 在网络服务?
  • 我认为他将其用于测试目的
  • @cHao 是的,用于演示目的。

标签: c# asp.net ajax multithreading


【解决方案1】:

What you seem to need is a Asynchronous HTTP Handler

在处理异步 HTTP 处理程序期间,ASP.NET 将 通常用于外部进程的线程 进入线程池,直到处理程序收到来自 外部过程。这样可以防止线程阻塞并提高 性能,因为只能执行有限数量的线程 同时。如果许多用户请求同步 HTTP 处理程序 依赖外部进程,操作系统可以快速耗尽 线程数,因为许多线程被阻塞并等待 外部进程。

您当前方法的主体将位于所提供示例的StartAsyncTask 方法主体中

【讨论】:

    【解决方案2】:

    您需要在会话期间加载一次 jquery.unobtrusive-ajax。检查是否已经加载:

    if (Request.Headers["X-Requested-With"] != "XMLHttpRequest")
    {
        Scripts.Render("~/Scripts/jquery.unobtrusive-ajax.min.js");
    }
    

    【讨论】:

    【解决方案3】:

    没有看到 $.ajax 的参数,我猜你需要将 async 设置为 true。

    $.ajax({
       url: "page.ashx",
       async: true
    });
    

    另外,请注意,不同的浏览器会根据它一次允许的请求数做出不同的反应。

    Check out async.

    【讨论】:

    • 我为什么要进行同步调用? $.ajax 的重点是利用异步部分。
    • 您是用一个 ajax 调用两次调用一个方法,还是在一个方法中一个接一个地调用两个代码块?我认为这种行为可能是因为它等待方法完成。请看:stackoverflow.com/a/4428894/2637902
    猜你喜欢
    • 1970-01-01
    • 2011-09-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-15
    • 1970-01-01
    • 2017-03-11
    相关资源
    最近更新 更多