Веб-сервисы не имеют исключений. Они возвращают ошибки SOAP.
Веб-службы ASMX даже не поддерживают ошибки SOAP должным образом.
Любое неисследованное исключение будет превращено в SoapException
. Когда из службы выбрасывается необработанное SoapException
, оно возвращается как ошибка SOAP.
Если вы использовали «Добавить веб-ссылку» для создания прокси-классов, то любые ошибки SOAP будут снова превращены в SoapException
.
С другой стороны, WCF должным образом поддерживает ошибки SOAP как на клиенте, так и на службе. Сервисная операция может объявить, что она может возвращать определенный тип ошибки, скажем, «InvalidDataFault»:
[OperationContract]
[FaultContract(typeof(InvalidDataFault))]
void SomeOperation(SomeDataContract request);
[DataContract]
public class InvalidDataFault
{
[DataMember]
public string Message {get;set;}
[DataMember]
public string PropertyName {get;set;}
}
Операция может затем вызвать ошибку:
throw new FaultException<InvalidDataFault>(
new InvalidDataFault {Message="Some message", PropertyName="Property1"});
Клиент может затем перехватить это исключение и получить доступ к деталям:
try
{
proxy.SomeOperation(data);
}
catch (FaultException<InvalidDataFault> ex)
{
// Can now process ex.Detail.Message and ex.Detail.PropertyName
}