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>