Перехват исключений из веб-службы в приложении Silverlight - PullRequest
2 голосов
/ 27 августа 2010

Я пытаюсь выдать исключение из моего веб-сервиса asmx и сделать так, чтобы интерфейс Silverlight перехватывал исключение в завершенном событии для веб-службы. Возможно ли это?

Ответы [ 2 ]

3 голосов
/ 27 августа 2010

Нет простого способа сделать это

, вам придется обернуть все свои исключения в веб-сервис как исключение ошибкиизменить код состояния на 200

проверить этот URL для образца

http://code.msdn.microsoft.com/Project/Download/FileDownload.aspx?ProjectName=silverlightws&DownloadId=3473

0 голосов
/ 27 августа 2010

Веб-сервисы не имеют исключений. Они возвращают ошибки 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
}
...