【问题标题】:Web Service - Asynchroneous execution and status updatesWeb 服务 - 异步执行和状态更新
【发布时间】:2011-09-08 12:42:33
【问题描述】:

我正在尝试开发一个使用 Javascript 和 SOAP 调用的 Web 服务。这是一个有状态的服务,用户可以登录一段时间,因此我使用 Context.Session 来存储必要的数据。 用户调用一个冗长的操作(在登录之后)并且需要定期接收状态更新。我遇到的问题是我的服务的行为方式是一次只能执行一个调用(即 WebMethod A()),并且在 A() 完成执行之前我无法调用 WebMethod B()。 有两个问题: 接收状态更新的最佳方法是什么 - 服务器可以自动将数据回发到客户端还是最好轮询 GetStatus 服务方法? 我怎样才能实现异步。在 Web 服务内部执行,以便我可以从同一个 Web 服务调用不同且有时完全不相关的 Web 方法? 谢谢!

【问题讨论】:

  • 我不知道你为什么说在方法A完成之前不能调用方法B。如果您从 Javascript 调用它们,几乎同时执行这两种方法应该不会有任何问题。我将发布一个关于如何做的“粗略”想法。

标签: c# javascript asp.net soap asynchronous


【解决方案1】:

使用 JQuery 你可以这样做:

function CallMethodA() {
        $.ajax({
            type: "POST",
            url: "WebService.asmx/MethodA",
            // whatever else ...
            success: function (response) {
                //handle success
            }
        });
    CallMethodB();
}


function CallMethodB() {
        $.ajax({
            type: "POST",
            url: "WebService.asmx/MethodB",
            // whatever else ...
            success: function (response) {
                //handle success
            }
        });
    }

Ajax requests in JQuery are async by default.

【讨论】:

  • 谢谢伊卡洛斯,反正我就是这样做的。看起来我将不得不检查服务器配置,因为我在其下运行 Web 服务的明显应用程序池将“最大工作进程数”设置为 1。这不应该阻止我产生子线程,不是吗?
  • 我想它已经被stackoverflow.com/questions/860478/…覆盖了。您可以向服务器提交多个请求,但它们将按顺序处理。
  • @Acolyte 我不这么认为。您绝对可以向服务器发送多个请求,它们将被并行处理。是的,有一个限制(我相信“标准”是四个),但这个限制绝对不是一个,除非服务器或客户端有某种特殊配置。证明我所说的最简单的方法是启动 firebug 并查看对于任何给定网站的同一域并行处理了多少请求。
  • 我关心的不是客户端,而是服务器。我们在 W2K3 上有一个旧的 IIS6,我怀疑有什么东西阻止它首先创建线程。
  • @Acolyte:很可能就是这样。服务器可以限制来自同一 IP 的并发连接数。我在 Apache 中看到过这个设置,我确信 IIS 可以做同样的事情。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-05-22
  • 2022-10-23
  • 2022-01-05
  • 2018-03-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多