Позвольте мне набросать ситуацию. У меня есть Windows-Service (давайте назовите его A
), который calls
a Веб-сервис (позволяет назвать его B
). B
звонки на различные Веб-услуги самостоятельно. (Позволяет называть эти веб-служб WS1
, WS2
, WS3
)Отличительный тайм-аут Исключение из SoapException
Чертеж:
//This is a Black Box (e.g. I can't change implementation)
+-----------------------------------------------+
| |
| ----> WS1 |
WindowsService A ----> | Webservice B ----> WS2 |
| ----> WS3 |
| |
+-----------------------------------------------+
Время от времени может возникнуть исключения во время звонков. За исключением случаев, когда должен прекратить выполнение программы и сообщить об этом разработчику (мне). Но когда возникает Timeout
, Window-Service A
должен попытаться выполнить команду retry
.
Так я написал следующий код:
try
{}
catch (WebException ex)
{
if (ex.Status == WebExceptionStatus.Timeout)
{
//Wait some time before retry
//Log the exception
//Retry
}
else
{
//Log the exception
throw;
}
}
catch (Exception ex)
{
//Log the exception
throw;
}
Этот код работает блестяще, если исключение происходит в Web-службы B
. Однако, когда timeout
встречается в WS1
, WS2
, WS3
; Я получаю SoapException
.
Вопрос:
Есть в любом случае, чтобы отфильтровать, если причиной SoapException
был Timeout
без использования сообщения, как указано здесь (MSDN- Handle TimeoutException). Есть ли какое-либо поле, которое может указывать на тип основного исключения?
Проблема, 'SoapException' не наследует от' WebException'. Поэтому я не могу использовать «Response-Property». «Элемент« Webexception-part »блестяще работает. Его SoapExceptions, которые прослушивают меня. – User999999
Поверьте мне, у меня была такая же проблема некоторое время назад, но разрешающая SOAP бросить исключение на часть WebException помогла многим избежать посторонних ошибок. В моем случае я не получил правильного формата заголовка, который был ... Формат заголовка: text/xml; кодировка = \ "UTF-8 \"; action = \ "headtrip \"; " – SanyTiger
Формат заголовка: text/xml; charset = \" utf-8 \ "; action = \" headtrip \ "; – SanyTiger