Как перехватить определенное исключение HttpException (#0x80072746) в IHttpHandler

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

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

3 ответа

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

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

или же

const int ErrConnReset = -2147014842;

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

        try {
            //...
        }
        catch (HttpException ex) {
            if ((uint)ex.ErrorCode != 0x80072746) throw;
        }

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

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

1000 0000 0000 0111 0010 0111 0100 0110

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

-0111 1111 1111 1000 1101 1000 1011 1010

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

-2147014842

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

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

Другие вопросы по тегам