总结:我希望能够捕获WebMethod中的XHR.abort(),以便尽快停止执行服务器端代码。
我有一个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,其唯一目的是指示要取消同一客户端的先前呼叫。如果有效,请将此作为答案发布。
尽管如此,其他方法也会受到高度赞赏!