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虽然为伟大的链接:) – Codesleuth
@Codesleuth你还打算发布一个答案'很快',或者你的意思是'在时间的充裕'? ;] – WynandB
我的歉意;这是很久以前的事了。解决方案的要点是调用第二个WebMethod来取消第一个WebMethod,但我不记得确切的解决方案。 – Codesleuth