Исключения из SoapHttpClientProtocol.Invoke Method .NET веб-сервис - PullRequest
2 голосов
/ 21 января 2009

Я звоню в веб-службу из приложения на основе форм C #.

ServReturnType obj = ServProxyClass(int i, int k);

У меня есть потенциал, чтобы получить исключение. Исключением может быть то, что служба вообще не подключалась, произошла ошибка при получении, но исходное сообщение прошло, или что-то среднее. Затем мне нужно принять решение на основе сгенерированного исключения, либо по типу, либо по сообщению, либо обоим, чтобы выполнить одно из двух следующих действий.

try
{    
     ServReturnType obj = ServProxyClass(int i, int k);
}
catch (WebException ex)
{
     DoAction1();
}
catch(SocketException ex)
{
     DoAction2();
}
catch(SoapException ex)
{
     DoAction1()
}

Проблема заключается в том, что мой выбор последующих действий зависит от того, был ли первый вызов на сервере перед сбоем. Как я могу найти список всех возможных исключений и что они могут означать, так как это весь код в фреймворке. Я посмотрел документы MSDN и увидел, что SoapHttpClientProtocol.Invoke может выдавать исключение SoapException, однако существуют методы, вызываемые этим методом, которые вызывают всплывающие исключения System.Net.WebExceptions. Поэтому мне нужен список всего стека вызовов и того, что он может выдать, и что это значит.

Есть идеи?

Обновление 1

Дарин, твой ответ более или менее подтверждает мои подозрения, что то, что я хочу, на самом деле не имеет смысла. Я решил сделать больше детективной работы, а затем использовать ее, чтобы решить, что делать дальше. К сожалению, в этом случае, поскольку мы обрабатываем кредитные карты, действительно важно, что именно произошло, и отправили ли мы данные.

1 Ответ

3 голосов
/ 21 января 2009

Полный список исключений, которые могут быть сгенерированы при вызове веб-службы, настолько велик, что я действительно не думаю, что это хорошая идея - проверять все возможные типы исключений. Во многих случаях было бы достаточно отловить исключение SoapException, которое может содержать некоторые бизнес-ошибки, передаваемые через элемент отказа SOAP , и любое другое исключение можно рассматривать как необработанную ошибку:

try
{    
    ServReturnType obj = ServProxyClass(int i, int k);
}
catch(SoapException ex)
{
    //Serialize and analyze the fault message from the exception to obtain more info.
    DoSomethingWithTheInfo();
}
catch(Exception ex)
{
    LogTheExceptionSoThatLaterYouKnowWhatHappened(ex);
    SayToTheUserThatSomethingTerriblyWrongHappened();
}

Вот хорошая статья , объясняющая, как вызывать и обрабатывать SoapExceptions.

...