Можно ли отбрасывать исключения обратно клиенту из моего сервиса?

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

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

Ответ 1

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

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

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

Ответ 2

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

Просто идея в любом случае...

Ответ 3

Вероятно, вам следует использовать SOAP Faults, поскольку они должны поддерживаться для любых клиентов. Не забудьте также установить дополнительные дескриптивные поля.

Ответ 4

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

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

Ответ 5

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

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

Говоря только об исключении Исключения в исключительных случаях.