2014-10-15 1 views
0

Позвольте мне набросать ситуацию. У меня есть 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). Есть ли какое-либо поле, которое может указывать на тип основного исключения?

ответ

0

Попробуйте этот код, он может помочь вам понять причину ошибки:
PS: Используйте его в catch()

string pageContent = new StreamReader(wex.Response.GetResponseStream()).ReadToEnd().ToString(); 
return pageContent; 
+0

Проблема, 'SoapException' не наследует от' WebException'. Поэтому я не могу использовать «Response-Property». «Элемент« Webexception-part »блестяще работает. Его SoapExceptions, которые прослушивают меня. – User999999

+0

Поверьте мне, у меня была такая же проблема некоторое время назад, но разрешающая SOAP бросить исключение на часть WebException помогла многим избежать посторонних ошибок. В моем случае я не получил правильного формата заголовка, который был ... Формат заголовка: text/xml; кодировка = \ "UTF-8 \"; action = \ "headtrip \"; " – SanyTiger

+0

Формат заголовка: text/xml; charset = \" utf-8 \ "; action = \" headtrip \ "; – SanyTiger