Какое исключение .net генерировать, когда сервер генерирует непредвиденное исключение через веб-сервис - PullRequest
0 голосов
/ 21 февраля 2012

Какое исключение .net должно выбрасывать клиент (или, лучше, повторно выбрасывать), если оно ловит какое-либо непредвиденное исключение с сервера (например, обернутое как FaultException через WCF, сервер может быть записан на Java) для дальнейшей его обработки клиент следующим образом:

  • Клиент показывает пользователю сообщение о возможной ошибке в клиенте / сервере
  • Клиент предоставляет разработчикам подробности этого исключения (например, по электронной почте)

Пример на бизнес-уровне:

var client = new MyWcfClient());
try {
  // Try get data.
  var data = client.getSomeData(id);
  if(data == null) {
    // Unexpected exceptions from the server.
    // throw new Exception???
  }
} catch(FaultException<Specified1Exception> exception) {
  // Handle e.g. re-throw.
  // Shows the user the myErrorText.
  throw new InvalidOperationException(myErrorText)
} catch(FaultException<Specified2Exception> exception) {
  // Handle e.g. re-throw.
  // Enforce to show the user some dialog.
  throw new ArgumentException(param, myText);
} catch(FaultException exception) {
  // Unexpected exceptions from the server.
  // throw new UnexpectedServerException???
} catch(Exception exception) {
  // WCF error, like communication timeout, soap etc.
  throw new InvalidOperationException(myOtherErrorText);
}

Предоставляет .net framework любые исключения для (в этом примере UnexpectedServerException), если нет, какое исключение вы бы создали?

Ответы [ 2 ]

1 голос
/ 22 февраля 2012

В следующем примере показана обычная обработка исключений для клиентов WCF:

try
{
    ... // service call
}
catch (FaultException<X> e)
{
    // handle fault specified as [FaultContract(typeof(X))]
}
catch (FaultException<Y> e)
{
    // handle fault specified as [FaultContract(typeof(Y))]
}
catch (FaultException e)
{
    // handle all other faults NOT specified as [FaultContract]
    // these are unhandled exception thrown by the service
}
catch (CommunicationException e)
{
    // handle all communication-layer exceptions
    // these are exceptions thrown by the WCF infrastucture
}
1 голос
/ 21 февраля 2012

Зачем вообще ловить исключение?

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...