Создание исключений из веб-службы .NET - PullRequest
5 голосов
/ 09 февраля 2011

У меня есть набор веб-сервисов, созданных с использованием атрибута [WebMethod].Считается ли «хорошей практикой» выбрасывать ArgumentException из такого метода, если его аргументы не указаны должным образом (и не могут быть использованы разумные значения по умолчанию)?Если это так, следует ли перехватывать и исключать это исключение, чтобы регистрировать его как на сервере, так и на клиенте?

Ответы [ 3 ]

5 голосов
/ 09 февраля 2011

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

Стандартным механизмом указания исключений в веб-службах является Soap Fault .

При .asmx, выброс SOAPException вызовет для вас ошибку.

Если вы перейдете в WCF, вы можете посмотреть FaultContracts .

Для улучшенной отладки удаленных исключений между клиентом .Net и сервером .Net вы можете обмануть и отправить исключениепо сети, используя includeExceptionDetailInFaults в вашей конфигурации.Само исключение должно быть сериализуемым, чтобы это работало.Тем не менее, вы захотите отключить это, прежде чем ваша система достигнет производительности.

Кроме того, вы часто обнаружите, что если запрос SOAP-запроса вызывающей стороны слишком плохо сформирован (например, если ваши аргументы включают сущности, которые могут 'не следует десериализовать), что ваш WebMethod вообще не будет вызываться - вызывающий просто получит ошибку (часто весьма загадочную).

Приведенные выше ошибки возникли из-за неверных аргументов при обращении клиента к вашему сервисудолжен генерироваться при проверке аргументов вызова.

Возможно, связано - После того, как запрос прошел проверку, для вашего собственного внутреннего состояния системы вы можете также использовать Code Contracts для обнаружения внутренних ошибок(или, возможно, пропущенные проверки, которые должны были произойти раньше).Однако они не будут распространяться на клиента.

3 голосов
/ 09 февраля 2011

Здесь хорошая статья об исключениях веб-службы

3 голосов
/ 09 февраля 2011

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

ОБНОВЛЕНИЕ: это, конечно, применимо, только если вы создаете новую услугу. Если вы модифицируете существующий, вы должны знать, как его используют существующие клиенты и как они ожидают коды ошибок.

...