Перехватить тайм-аут с помощью HttpExceptionC#

Место общения программистов C#
Ответить
Anonymous
 Перехватить тайм-аут с помощью HttpException

Сообщение Anonymous »

У нас есть страница загрузки изображений, время ожидания которой истекает, если загрузка пользователем занимает более 15 минут.

Мы перехватываем исключение HttpException, возникающее по истечении времени ожидания. Но как мы можем узнать, что исключение произошло из-за таймаута, чтобы мы могли вернуть конкретное сообщение?

Наш код:

try
{
// do stuff here
}
catch (HttpException ex)
{
// What can we check to know if this is a timeout exception?
// if (ex == TimeOutError)
// {
// return "Took too long. Please upload a smaller image.";
// }
return "Error with image. Try again.";
}
catch (Exception ex)
{
return "Error with image. Try again.";
}


И как выглядит ошибка тайм-аута:

System.Web.HttpException (0x80004005): Request timed out.
at System.Web.HttpRequest.GetEntireRawContent()
at System.Web.HttpRequest.GetMultipartContent()
at System.Web.HttpRequest.FillInFormCollection()
at System.Web.HttpRequest.EnsureForm()
at System.Web.HttpRequest.get_Form()
at MyStore.upload.ProcessRequest(HttpContext context)

ex.ErrorCode=-2147467259
ex.GetHttpCode=500
ex.WebEventCode=0


Я не решаюсь просто выполнить оператор if, который сравнивает приведенные выше коды ошибок.

HttpCode 500 кажется общим кодом внутренней ошибки сервера, который может произойти не только в случае исключения тайм-аута.

ErrorCode -2147467259 - это то, что я незнаком с. Если это число останется постоянным для ошибок тайм-аута и никогда не произойдет с исключениями, не связанными с тайм-аутом, тогда я мог бы выполнить сравнение if с этим числом.

Я думаю, что должен быть простой способ узнать, является ли HttpException исключением тайм-аута, например, что-то вроде:

if (ex == TimeoutError) // what should this be?


ОБНОВЛЕНИЕ:

Я только что попробовал перехватить TimeoutException, как показано ниже, но оно все равно перехватывается только HttpException.

try
{
// do stuff here
}
catch (TimeoutException ex)
{
// Timeout doesn't get caught. Must be a different type of timeout.
// So far, timeout is only caught by HttpException.
return "Took too long. Please upload a smaller image.";
}
catch (HttpException ex)
{
// What can we check to know if this is a timeout exception?
// if (ex == TimeOutError)
// {
// return "Took too long. Please upload a smaller image.";
// }
return "Error with image. Try again.";
}
catch (Exception ex)
{
return "Error with image. Try again.";
}


Подробнее здесь: https://stackoverflow.com/questions/335 ... pexception
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»