2010-08-27 108 views

回答

0

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

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

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

如果您使用“添加Web引用”来创建您的代理类,那么任何SOAP故障将再次变成SoapException

另一方面,WCF正确支持客户端和服务上的SOAP Faults。服务操作可以声明,它可能会返回一个特定类型的故障,比如,“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 
} 
相关问题