Я пытаюсь поймать WebException с определенным статусом внутри метода IsTransient, но он никогда не обнаруживает следующую ошибку:
System.Net.WebException: Unable to read data from the transport connection: Connection timed out. ---> System.IO.IOException: Unable to read data from the transport connection: Connection timed out. ---> System.Net.Sockets.SocketException: Connection timed out
И вот код:
private bool IsTransient(Exception ex)
{
var webException = ex as WebException;
if (webException != null)
{
return new[]
{
WebExceptionStatus.ConnectionClosed,
WebExceptionStatus.ConnectFailure,
WebExceptionStatus.Timeout,
WebExceptionStatus.RequestCanceled,
WebExceptionStatus.ReceiveFailure
}.Contains(webException.Status);
}
return false;
}
Когда я тестирую его, отключив интернет-соединение на устройстве сканера, он возвращает true, но в производственной среде, когда веб-служба вызывает тайм-аут, он не работает.
@TheGeneral хорошо, глядя на трассировку стека, я предполагаю, что она возвращает тайм-аут состояния, но я не могу быть уверен на 100%, потому что это происходит только в производственной среде.
Если статус был TimeOut, почему он возвращает false? Я имею в виду, что очень маловероятно, что в «Содержит» есть ошибка. Дело в том, что мы не можем догадаться за вас, и это действительно ваша работа, чтобы выяснить, кто знает, что он возвращает, только то, что это не то, что вы ожидаете. Когда вы обнаружите это (и если вы настроены на этот тип проверки), вы сможете лучше справиться с этим.
@TheGeneral Если предположить, что это не тайм-аут, где я могу увидеть, какой статус соответствует приведенному выше сообщению об ошибке?
Документация не распространяется на это, если только вы не прочитаете исходный код, который, как я предполагаю, довольно длинный, или не найдете кого-то, кто написал в блоге о «точном» коде состояния, который появляется в каждой отдельной ситуации itz bitz (что я сомневаюсь, что вы будете find), поэтому я спросил вас, знаете ли вы возвращаемый код состояния... Возможно, вам просто придется использовать метод проб и ошибок и эмпирические данные, к сожалению, так как могут быть всевозможные крайние случаи
Какой статус он возвращает? Вы говорите, что он вообще не возвращает статус?