【问题标题】:Need to execute web services asynchronously in server side when called by jQuery's .ajaxjQuery 的 .ajax 调用时需要在服务器端异步执行 Web 服务
【发布时间】:2011-03-22 01:04:45
【问题描述】:

我有一个 ASP.NET (3.5) 网页,它使用 jQuery 的 .ajax 方法调用一些网络方法(基于 SOAP)。 Web 方法实现“ScriptMethod”属性并返回 JSON 数据。 Web 服务文件 (asmx) 是同一项目的本地文件。

我注意到这些 web 方法在服务器上同步执行,这意味着它们按顺序运行并对性能产生负面影响,有些方法正在等待,而有些方法很慢。

我阅读了this article,但我不确定我是否理解实现 Scriptmethod 的 WebMethods 只能同步运行(它们实现 IHttpHandler 而不是 IHttpAsyncHandler)。

如果这是真的,我可能不得不改变设计。

我正在寻找其他设计,比如使用 WCF,其中浏览器可以使用 JavaScript 调用 webmethods,并且 web 方法在服务器上异步运行。

有什么想法或示例代码吗?

【问题讨论】:

标签: jquery asp.net ajax wcf web-services


【解决方案1】:

由于您使用 jQuery 中的 ajax 方法从浏览器调用 Web 服务,因此调用已经是异步的。您可以在http://api.jquery.com/jQuery.ajax/ 的$.ajax 文档中看到这一点。如果您连续进行 3 次 ajax 调用,每个调用将同时执行,并且回调函数将以先到先服务器的方式启动。

希望我没有误解你的问题。

【讨论】:

  • 来自浏览器的调用是异步的,但它们在服务器上不是异步的。如果我在其中一个 web 方法中添加 sleep(15000),其他 web 方法在运行前等待 15 秒。
【解决方案2】:

如果您使用的是 WCF,您可以按如下方式使用服务行为属性:[ServiceBehavior(ConcurrencyMode = ConcurrencyMode.Multiple)]

http://msdn.microsoft.com/en-us/library/system.servicemodel.servicebehaviorattribute.concurrencymode.aspx

【讨论】:

  • 我没有使用 WCF。我认为从多个客户端调用相同的方法时会使用 ConcurrencyMode 设置,这不是我所拥有的。一个客户端调用 Web 服务中的多个方法。
猜你喜欢
  • 1970-01-01
  • 2020-01-21
  • 2023-03-15
  • 2011-09-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多