Перехват прерывания в WebMethod при вызове XHR.abort () - PullRequest
2 голосов
/ 29 сентября 2011

Резюме: Я хотел бы иметь возможность перехватить 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единственная цель которого - указать, что предыдущий звонок от того же клиента должен быть отменен.Опубликуем это как ответ, если это сработает.

Другие способы сделать это были бы весьма признательны!

1 Ответ

1 голос
/ 23 ноября 2011

Может быть, эта статья поможет http://msdn.microsoft.com/en-us/magazine/cc163380.aspx

...