【问题标题】:Multiple ajax to c# webmethod calls多个 ajax 到 c# webmethod 调用
【发布时间】:2014-02-13 11:43:17
【问题描述】:

我有一个对 c# asmx web 方法的 jquery ajax 调用,该方法执行一些处理,并在内部调用更多 api 的 \ DB 操作等,大约需要 20-30 秒

网络方法

[WebMethod]
public void dummy()
{
    File.Create(@"C:\test\test" + DateTime.Now.Millisecond.ToString() + ".txt");
    System.Threading.Thread.Sleep(60000);
}

AJAX 调用

$.ajax(
     {
         url:Service.asmx/dummy",
         contentType: "application/json; charset=utf-8",
         dataType: "json",
         type: "POST",
         success: function (strData) {
             alert('done');
         }
    });

ajax 调用在一个循环中被触发了 2 次,但是 web 方法只被调用了一次,所以我尝试了async: false,然后 web 方法被点击了两次,但是在 60 秒延迟之后。

我做错了什么?

【问题讨论】:

  • 您的代码看起来不错,应该可以工作。你是如何测试该方法只被命中一次的?
  • :) 因为文件只创建了一次。
  • 但是如果两个调用都通过相同的毫秒...您可能只是覆盖了文件...

标签: c# jquery ajax asmx webmethod


【解决方案1】:

去掉后面代码中System.Threading.Thread.Sleep(60000)的延迟,在收到服务器端的响应后发送第二个ajax调用。

$.ajax(
     {
         url:Service.asmx/dummy",
         contentType: "application/json; charset=utf-8",
         dataType: "json",
         type: "POST",
         success: function (strData) {
             alert('done');
             //send second call here
         }
         error:  function (jqXHR, textStatus, errorThrown) {
             //send second call here if required.
         }
    });

如果您对同时通话没有任何同步问题,那么您可以消除延迟并同时发送多个通话。

【讨论】:

  • 感谢 Adil 的回复,但我面临的问题是我想向 webmethod 发出并行请求。如果我等待响应,它与使调用异步:false 一样好,对吗?
  • 如果您对同时通话没有任何同步问题,那么您可以消除延迟并同时发送多个通话
  • 好吧,那延迟是一个无赖,导致各种各样的问题(我仍然不知道为什么)如果有人能对此有所了解,那就太好了。我删除了延迟,删除了虚拟网络方法并放置了实际代码(调用第 3 方 api)并返回了一个字符串,它可以工作。
  • System.Threading.Thread.Sleep 在给定时间内阻塞当前线程,并且在该时间内方法的执行不会完成。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-02-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多