2011-09-29 74 views
2

摘要:我希望能够捕获WebMethod中的XHR.abort(),以尽快停止执行服务器端代码。在调用XHR.abort()时捕获WebMethod中的异常终止()

我有一个WebMethod,类似如下:

[WebMethod] 
public static string GetHello() 
{ 
    System.Threading.Thread.Sleep(5000); 
    return "{\"result\":\"Hello!\"}"; 
} 

在我把这种方法用下面的JavaScript(jQuery的)代码的页面:

var lastXHR = null; 

function doCall() { 

    if (lastXHR != null) 
     lastXHR.abort(); 

    lastXHR = $.ajax({ 
     url: "default.aspx/GetHello", 
     data: "{}", 
     contentType: "application/json; charset=utf-8", 
     type: 'POST', 
     error: function (jqXHR, textStatus, errorThrown) { 
      if (textStatus.statusText == "abort") { 
       // I know this was aborted here 
       // Code omitted for simplicity 
      } 
     }, 
     success: function (data, textStatus, jqXHR) { 
      var d = $.parseJSON(data.d); 
      alert(d.result); 
     }, 
     complete: function (xhr, status) { 
      lastXHR = null; 
     } 
    }); 
} 

我能够处理abort()在客户端使用此代码很容易,但我希望Web服务器在XHR中止时停止执行GetHello()

我需要这样做的原因是因为在我的项目的服务器端,我要求在数据库上进行搜索,这可能需要很长时间才能完成,并且调用SqlCommand.Cancel()对我的IT团队非常有用; - )

更新:我将尝试调用一个辅助WebMethod,其唯一目的是表明来自同一个客户端的先前调用将被取消。如果它能工作,将会作为答案发布。

其他方法可以做到这一点,不胜感激!

回答

1

可能这篇文章无线本地环路帮助http://msdn.microsoft.com/en-us/magazine/cc163380.aspx

+0

感谢您的链接,但是这并没有帮助我在第一,因为我需要在我的生产代码,每次通话使用的会话。我已经解决了这个问题,我很快就会把它作为答案发布。 +1虽然为伟大的链接:) – Codesleuth

+1

@Codesleuth你还打算发布一个答案'很快',或者你的意思是'在时间的充裕'? ;] – WynandB

+0

我的歉意;这是很久以前的事了。解决方案的要点是调用第二个WebMethod来取消第一个WebMethod,但我不记得确切的解决方案。 – Codesleuth

相关问题