Можно ли отбрасывать исключения обратно клиенту из моего сервиса?
Я пишу службу на основе 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
Говоря только об исключении Исключения в исключительных случаях.