Как перехватить определенное исключение 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
что, наконец, на самом деле правильное целое число.
Не знаю, может ли это помочь вам решить проблему.