2014-02-13 67 views
1

我有一个jquery Ajax调用C#ASMX Web方法,其中做了一些处理,并在内部调用更多的API \ DB操作,等等等等,以约20-30秒多个AJAX到C#的WebMethod调用

WEB方法

[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调用为w在一个循环被触发2次,但网络方法只被调用一次,所以我试图async: false,然后网络方法被击中两次,但在60秒延迟后。

我在做什么错了?

+0

你的代码似乎很好,应该工作。你是如何测试该方法只被命中一次的? –

+0

:)因为该文件只创建一次。 –

+0

但是,如果两个电话都通过相同的毫秒...您可能只是覆盖文件... –

回答

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. 
     } 
    }); 

如果您没有任何同步呼叫的同步问题,那么您可以删除延迟并同时发送多个呼叫。

+0

感谢您的答复Adil,但我面临的问题是,我想并行请求的webmethod。如果我等待响应,就像调用async:false一样好,对吧? –

+0

如果你没有任何同步呼叫的同步问题,那么你可以删除延迟并同时发送多个呼叫 – Adil

+0

好吧,那个延迟是一个无赖,导致各种问题(我仍然不知道为什么),如果有人可以扔一些光。我删除了延迟,删除了虚拟webmethod并放置了实际的代码(调用第三方api)并返回一个sting,并且它可以工作。 –