O'Reilly logo

Programming WCF Services by Juval Lowy

Stay ahead with the world's most comprehensive technology and business learning platform.

With Safari, you learn the way you learn best. Get unlimited access to videos, live online training, learning paths, books, tutorials, and more.

Start Free Trial

No credit card required

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 ...

With Safari, you learn the way you learn best. Get unlimited access to videos, live online training, learning paths, books, interactive tutorials, and more.

Start Free Trial

No credit card required