Можно ли отправлять исключения клиенту из моего сервиса? - PullRequest
10 голосов
/ 05 февраля 2010

Я пишу службу на основе Java с WSDL для использования клиентом .Net, и я подумал, что, когда я получу от клиента недопустимое значение, я выдам исключение, которое мой клиент может затем перехватить и отобразить в сообщении. ящик или что-то для пользователя (клиент является настольным приложением).

Мне было интересно, будет ли нормально использовать этот подход или есть лучший способ сделать это.

Ответы [ 5 ]

9 голосов
/ 05 февраля 2010

Я бы сказал "нет". Сообщения об ошибках и т. Д., Но я бы не стал сериализовать исключение. Вы не представляете, кто является клиентом или на каком языке они написаны.

Служба должна обработать исключение: поймать его, зарегистрировать и создать разумные сообщения об ошибках и коды состояния. На мой взгляд, это не место для исключений.

И когда я говорю «разумные сообщения об ошибках», я не имею в виду ничего похожего на трассировку стека. Скорее всего, это бизнес-клиенты, которым не следует читать такие вещи. Важным для бизнеса является сообщение, а не трассировка стека.

8 голосов
/ 05 февраля 2010

.NET в целом имеет дело с FaultExceptions (скрытые ошибки SOAP) в WCF. Я бы предположил, что если вы выбросите правильный сбой SOAP, то WCF превратит это в FaultException к тому времени, когда клиент получит ответ, чтобы он мог получить оператор catch FaultException try. Это все еще позволило бы другим клиентам .NET использовать сервис без нарушения стандартов.

В любом случае, просто идея ...

4 голосов
/ 05 февраля 2010

Что вам, вероятно, следует сделать, это использовать ошибки SOAP, поскольку они должны поддерживаться для любых клиентов. Обязательно установите дополнительные описательные поля.

1 голос
/ 05 февраля 2010

Концептуально это нормально, но я не думаю, что вы можете буквально выдать исключение Java через HTTP обратно клиенту .NET.

Вы можете использовать HTTP 500 для сигнализации об ошибке сервера; Вы также должны иметь возможность прикрепить содержательное сообщение к ответу, которое поможет разработчикам .NET выяснить, как лучше использовать ваш сервис. Это может включать или не включать сериализованную трассировку стека Java.

0 голосов
/ 05 февраля 2010

Первое, что нужно решить, - это предотвратить появление исключений, выполнив проверку данных перед их обработкой. IE

string func(string cat)<br> if(cat == null || cat.length == 0){<br> //set errorLabelText to "bad data"<br> return;<br> }<br> //else code

Это, как говорится, только исключение в исключительных случаях.

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