Как перехватить определенное исключение HttpException (# 0x80072746) в IHttpHandler - PullRequest
3 голосов
/ 24 февраля 2011

Похоже, что это HttpException (0x80072746 - удаленный хост закрыл соединение) может быть сгенерировано, если, например, пользователь закрывает окно во время передачи файла. Даже если мы отправляем файлы небольшими блоками и проверяем, что клиент все еще подключен, исключение все равно может возникнуть. Мы хотим быть в состоянии поймать это конкретное исключение, игнорировать его.

ErrorCode, предоставленный в HttpException, является Int32 - слишком мал, чтобы содержать 0x80072746, так где мы можем найти это число?

Ответы [ 3 ]

5 голосов
/ 24 февраля 2011

Свойство HttpException.ErrorCode выдает код ошибки, который вы ищете. Сделайте так, чтобы это выглядело примерно так:

        try {
            //...
        }
        catch (HttpException ex) {
            if ((uint)ex.ErrorCode != 0x80072746) throw;
        }
5 голосов
/ 24 февраля 2011

Int32 на самом деле не слишком маленький, чтобы содержать 0x80072746;только в «обычной» записи это число отрицательно: 0x80072746 == -2147014842, вы можете создать константу для сравнения кода ошибки:

const int ErrConnReset = unchecked((int)0x80072746);

или

const int ErrConnReset = -2147014842;
2 голосов
/ 24 февраля 2011

В информатике отрицательное целое число представляется в шестнадцатеричном формате, причем первый бит установлен в 1 (источник: wikipediat ).

В соответствии с этим шестнадцатеричное число 0x80072746 можетзаписать в базе 2:

1000 0000 0000 0111 0010 0111 0100 0110

Первый бит установлен ... тогда он соответствует фактически этому числу:

-0111 1111 1111 1000 1101 1000 1011 1010

, который в конечном итоге можно представить в базе 10 следующим образом:

-2147014842

что, наконец, на самом деле является правильным целым числом.

Не знаю, может ли это помочь вам решить проблему.

...