Резюме: Я хотел бы иметь возможность перехватить 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()
с помощью этого кода на клиенте, но я бы хотел, чтобы веб-сервер прекратил выполнение GetHello()
, когда XHR прерван.
Причина, по которой мне нужно это сделать, заключается в том, что на стороне сервера в моем проекте я вызываю поиск в базе данных, что потенциально может занять много секунд, и вызов SqlCommand.Cancel()
был бы очень полезен для моей ИТ-команды; -)
ОБНОВЛЕНИЕ: Я собираюсь попытаться вызвать вторичный WebMethodединственная цель которого - указать, что предыдущий звонок от того же клиента должен быть отменен.Опубликуем это как ответ, если это сработает.
Другие способы сделать это были бы весьма признательны!