2010-08-27 111 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 
} 
相關問題