Habituellement, le service WCF est hébergé dans un ServiceHost, si le service WCF échoue, la seule option est de supprimer le service WCF et d'en démarrer un nouveau.
Le ServiceHost a un événement déclencheur « FAULTED » qui est activé lorsque le service WCF échoue:
ServiceHost host = new ServiceHost(new Service.MyService());
host.Faulted += new EventHandler(host_faulted);
host.Open();
Il est possible d'obtenir l'exception causant la faute, mais il faut un peu plus de travail:
public class ErrorHandler : IErrorHandler
{
public void ProvideFault(Exception error, MessageVersion version, ref Message fault)
{
}
public bool HandleError(Exception error)
{
Console.WriteLine("exception");
return false;
}
}
public class ErrorServiceBehavior : IServiceBehavior
{
public void Validate(ServiceDescription serviceDescription, ServiceHostBase serviceHostBase)
{
}
public void AddBindingParameters(ServiceDescription serviceDescription, ServiceHostBase serviceHostBase, Collection<ServiceEndpoint> endpoints, BindingParameterCollection bindingParameters)
{
}
public void ApplyDispatchBehavior(ServiceDescription serviceDescription, ServiceHostBase serviceHostBase)
{
ErrorHandler handler = new ErrorHandler();
foreach (ChannelDispatcher dispatcher in serviceHostBase.ChannelDispatchers)
{
dispatcher.ErrorHandlers.Add(handler);
}
}
}
ServiceHost host = new ServiceHost(new Service.MyService());
host.Faulted += new EventHandler(host_faulted);
host.Description.Behaviors.Add(new ErrorServiceBehavior());
host.Open();
Crédits http://www.haveyougotwoods.ca/2009/06/24/creating-a-global-error-handler-in-wcf
ici vous pouvez obtenir toute la théorie http://msdn.microsoft.com/en-us/library/ms789041(v=vs.110).aspx –