【问题标题】:ASMX service call via Ajax hangs (never completes)通过 Ajax 的 ASMX 服务调用挂起(从未完成)
【发布时间】:2011-05-13 13:55:00
【问题描述】:

当连续进行大量调用时,使用 asmx 服务通过 ajax 调用更新会话变量是否会出现问题?

我有一个更新会话变量的 asmx(项目是旧版 ASP.NET,在 Web 应用程序层没有 WCF)Web 服务。单击复选框时,有一个使用此方法的 ajax 调用。除非您一个接一个地单击复选框(可以这样做),否则它会起作用。 ajax 调用挂起(永远不会结束)。

我认为这与尝试更新会话变量的多个请求有关,但我不确定。任何人遇到这个,可以提供一些建议吗?注意:我知道 WCF 将是一个可能的答案,但我想知道是否有不需要立即将 asmx 服务更改为 WCF 的解决方案。

【问题讨论】:

  • 如果在asmx文件中设置断点,点击多个checkbox能打到每一个吗?

标签: asp.net asmx session-variables


【解决方案1】:

当大量连续调用时,使用 asmx 服务通过 ajax 调用更新会话变量是否会出现问题?

是的,因为 ASP.NET 将按顺序排列并执行这些请求,而不是并行执行,因为会话对象不是线程安全的。如果来自同一会话的多个请求被发送到某个 ASP.NET 处理程序,并且如果该处理程序写入该会话,它只会将这些请求排队。

【讨论】:

  • 如果是这种情况,它的服务调用可能需要更多时间来完成请求队列...
  • 这也回答了我的问题。谢谢。
【解决方案2】:

如果您的服务仅更新会话变量中的相同键,您可以始终尝试将值本地存储在 cookie 中,直到值更改。然后,当值发生变化时,您可以调用 ASMX 服务将新值存储在会话变量中。

【讨论】:

    【解决方案3】:

    根据您使用的 AJAX 库,您始终可以选择在触发下一个调用之前放弃上一个正在运行的调用。如果您能详细说明如何调用 Web 服务,我可能会帮助您在开始新的调用之前放弃以前的调用。

    【讨论】:

    • 好建议。我知道我可以调用 abort 来终止 AJAX 调用上的请求(我正在使用 jQuery)。我更感兴趣的是什么让 asmx 服务花费了这么长时间。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-18
    • 2013-03-27
    • 2012-03-16
    • 1970-01-01
    • 1970-01-01
    • 2016-05-07
    相关资源
    最近更新 更多