There is no place on ClientBase where you can get this information. But you can add a personalized message inspector ( IClientMessageInspector ) to the client, where you can see all the messages that are received; for these messages, you can check the IsFault property, and if true, register the message as you want.
Update: adding sample code
using System.ServiceModel.Channels; using System.ServiceModel.Dispatcher; public class StackOverflow_12842014 { [ServiceContract] public interface ITest { [OperationContract] string Echo(string text); } public class Service : ITest { public string Echo(string text) { if (text == "throw") throw new ArgumentException("Throwing as requested"); return text; } } class MyClient : ClientBase<ITest>, ITest { public MyClient(Binding binding, EndpointAddress address) : base(binding, address) { this.Endpoint.Behaviors.Add(new MyFaultLogger()); } public string Echo(string text) { return this.Channel.Echo(text); } class MyFaultLogger : IEndpointBehavior, IClientMessageInspector { public void AddBindingParameters(ServiceEndpoint endpoint, BindingParameterCollection bindingParameters) { } public void ApplyClientBehavior(ServiceEndpoint endpoint, ClientRuntime clientRuntime) { clientRuntime.MessageInspectors.Add(this); } public void ApplyDispatchBehavior(ServiceEndpoint endpoint, EndpointDispatcher endpointDispatcher) { } public void Validate(ServiceEndpoint endpoint) { } public void AfterReceiveReply(ref Message reply, object correlationState) { if (reply.IsFault) { Console.ForegroundColor = ConsoleColor.Red; Console.WriteLine("Fault received!: {0}", reply); Console.ResetColor(); } } public object BeforeSendRequest(ref Message request, IClientChannel channel) { return null; } } } public static void Test() { string baseAddress = "http://" + Environment.MachineName + ":8000/Service"; ServiceHost host = new ServiceHost(typeof(Service), new Uri(baseAddress)); host.Description.Behaviors.Find<ServiceDebugBehavior>().IncludeExceptionDetailInFaults = true; host.AddServiceEndpoint(typeof(ITest), new BasicHttpBinding(), ""); host.Open(); Console.WriteLine("Host opened"); MyClient client = new MyClient(new BasicHttpBinding(), new EndpointAddress(baseAddress)); Console.WriteLine(client.Echo("Hello")); try { Console.WriteLine(client.Echo("throw")); } catch (Exception) { Console.WriteLine("The fault should have been traced"); } client.Close(); Console.Write("Press ENTER to close the host"); Console.ReadLine(); host.Close(); } }
source share