Normalerweise wird der WCF-Dienst in einem ServiceHost gehostet. Wenn der WCF-Dienst fehlschlägt, besteht die einzige Möglichkeit darin, den WCF-Dienst zu beenden und einen neuen zu starten.
Der Servicehost hat einen Ereignisauslöser „Faulted“, der aktiviert wird, wenn der WCF-Dienst versagt:
ServiceHost host = new ServiceHost(new Service.MyService());
host.Faulted += new EventHandler(host_faulted);
host.Open();
Es ist möglich, die Ausnahme zu erhalten, den Fehler verursacht, aber es erfordert ein bisschen mehr Arbeit:
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();
Credits http://www.haveyougotwoods.ca/2009/06/24/creating-a-global-error-handler-in-wcf
Hier können Sie alle Theorie http://msdn.microsoft.com/en-us/library/ms789041(v=vs.110).aspx –