在Silverlight应用程序中捕获Web服务引发的异常异常

时间:2010-08-27 18:20:37

标签: silverlight web-services exception asmx

我正在尝试从我的asmx web服务中抛出异常,并让Silverlight前端在已完成的Web服务事件中捕获异常。这可能吗?

2 个答案:

答案 0 :(得分:3)

这样做没有简单的方法

您必须将所有异常包装在Web服务中作为故障异常
将状态代码更改为200

查看此网址以获取示例

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

答案 1 :(得分:0)

Web服务没有例外。它们返回SOAP Faults。

ASMX Web服务甚至不能正确支持SOAP Fault。

任何未捕获的异常都将变为SoapException。当从服务中抛出未被捕获的SoapException时,它将作为SOAP Fault返回。

如果您使用“添加Web引用”来创建代理类,那么任何SOAP错误都将再次变为SoapException

另一方面,WCF在客户端和服务上都正确支持SOAP Fault。服务操作可以声明它可能返回特定类型的错误,例如“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"});

然后,客户端可以捕获此异常并访问Details:

try
{
    proxy.SomeOperation(data);
}
catch (FaultException<InvalidDataFault> ex)
{
    // Can now process ex.Detail.Message and ex.Detail.PropertyName
}