Нет, создание исключений из веб-служб не является хорошей практикой, поскольку исключения .NET (например, ArgumentException
) не поддерживаются кросс-платформенными (подумайте, как клиент Java должен реагировать).
Стандартным механизмом указания исключений в веб-службах является Soap Fault .
При .asmx
, выброс SOAPException вызовет для вас ошибку.
Если вы перейдете в WCF, вы можете посмотреть FaultContracts .
Для улучшенной отладки удаленных исключений между клиентом .Net и сервером .Net вы можете обмануть и отправить исключениепо сети, используя includeExceptionDetailInFaults в вашей конфигурации.Само исключение должно быть сериализуемым, чтобы это работало.Тем не менее, вы захотите отключить это, прежде чем ваша система достигнет производительности.
Кроме того, вы часто обнаружите, что если запрос SOAP-запроса вызывающей стороны слишком плохо сформирован (например, если ваши аргументы включают сущности, которые могут 'не следует десериализовать), что ваш WebMethod
вообще не будет вызываться - вызывающий просто получит ошибку (часто весьма загадочную).
Приведенные выше ошибки возникли из-за неверных аргументов при обращении клиента к вашему сервисудолжен генерироваться при проверке аргументов вызова.
Возможно, связано - После того, как запрос прошел проверку, для вашего собственного внутреннего состояния системы вы можете также использовать Code Contracts для обнаружения внутренних ошибок(или, возможно, пропущенные проверки, которые должны были произойти раньше).Однако они не будут распространяться на клиента.