Fault Contracts

By default, any exception thrown by the service reaches the client as a FaultException. The reason is that anything beyond communication errors that the service wishes to share with the client must be part of the service contractual behavior. To that end, WCF provides fault contracts—a way for the service to list the type of errors it can throw. The idea is that these types of errors should be the same as the type parameters used with FaultException<T>, and by listing them in a fault contract, a WCF client will be able to distinguish between contracted faults and other errors.

The service defines its fault contracts using the FaultContractAttribute:

[AttributeUsage(AttributeTargets.Method,AllowMultiple =true,Inherited = false)]
public sealed class FaultContractAttribute : Attribute
{
   public FaultContractAttribute(Type detailType);
   //More members
}

You apply the FaultContract attribute directly on a contract operation, specifying the error detailing type, as shown in Example 6-3.

Example 6-3. Defining a fault contract

[ServiceContract]
interface ICalculator
{
   [OperationContract]
   double Add(double number1,double number2);

   [OperationContract][FaultContract(typeof(DivideByZeroException))]
   double Divide(double number1,double number2);
   //More methods
}

The effect of the FaultContract attribute is limited to the method it decorates. Only that method can throw that fault and have it propagated to the client. In addition, if the operation throws an exception that is not in the ...

Get Programming WCF Services now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.