我正在尝试从我的asmx web服务中抛出异常,并让Silverlight前端在已完成的Web服务事件中捕获异常。这可能吗?
答案 0 :(得分:3)
这样做没有简单的方法
您必须将所有异常包装在Web服务中作为故障异常
将状态代码更改为200
查看此网址以获取示例
答案 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
}