La gestione delle eccezzioni con i web services oggi è abbastanza semplice, basta create una SoapException e rimandarla al chiamante. Peccato che attualmente non sia possibile definirlo automaticamente nel contratto (WSDL) in quanto non esistono attributi che definiscano la SOAP faults. In Indigo invece è possibile definire a livello di contratto le sezioni fault:
[OperationContract]
[FaultContract(typeof(DivideByZeroException))]
[FaultContract(typeof(ArgumentOutOfRangeException))]
double Divide(double n1, double n2);
il quale si rifletterà nel WSDL:
<wsdl:operation name="Divide">
<wsdl:input wsa:Action="http://Microsoft.ServiceModel.Samples/ICalculator/Divide" message="tns:ICalculator_Divide_InputMessage" xmlns:wsa="http://schemas.xmlsoap.org/ws/2004/08/addressing" />
<wsdl:output wsa:Action="http://Microsoft.ServiceModel.Samples/ICalculator/DivideResponse" message="tns:ICalculator_Divide_OutputMessage" xmlns:wsa="http://schemas.xmlsoap.org/ws/2004/08/addressing" />
<wsdl:fault wsa:Action="http://Microsoft.ServiceModel.Samples/DivideByZeroExceptionFault" name="DivideByZeroExceptionFault" message="tns:ICalculator_Divide_DivideByZeroExceptionFault_FaultMessage" xmlns:wsa="http://schemas.xmlsoap.org/ws/2004/08/addressing" />
<wsdl:fault wsa:Action="http://Microsoft.ServiceModel.Samples/ArgumentOutOfRangeExceptionFault" name="ArgumentOutOfRangeExceptionFault" message="tns:ICalculator_Divide_ArgumentOutOfRangeExceptionFault_FaultMessage" xmlns:wsa="http://schemas.xmlsoap.org/ws/2004/08/addressing" />
</wsdl:operation>