IErrorHandler ne semble pas être la manutention de mes erreurs dans WCF .. des idées?

Ont été autour de la lecture sur IErrorHandler et que vous voulez aller à la config de l'itinéraire.
donc, j'ai lu la suite dans une tentative de le mettre en œuvre.

MSDN

Keyvan Nayyeri blog à propos de la définition de type

Rory Primrose Blog

C'est fondamentalement juste la msdn exemple enveloppé dans une classe qui hérite de IErrorHandler et IServiceBehaviour ... alors c'est enveloppé dans le Prolongement de l'élément qui hérite de BehaviourExtensionElement soi-disant pour me permettre d'ajouter un élément dans le web.config. Qu'ai-je manqué?

J'ai réussi à le compiler et de les différentes erreurs que j'ai corrigé, il semble que la WCF est en fait le chargement du gestionnaire d'erreur. Mon problème est que l'exception que je suis le jeter à la poignée dans le gestionnaire d'erreur n';t obtenir de l'exception est passé.

Mon service de la mise en œuvre appelle tout simplement une méthode sur une autre classe qui jette ArgumentOutOfRangeException - toutefois, cette exception n'est jamais géré par le gestionnaire.

De mon site web.config

<system.serviceModel>
    <bindings>
      <basicHttpBinding>
        <binding name="basic">
          <security mode="None" />                      
        </binding>
      </basicHttpBinding>
    </bindings>
    <extensions>
      <behaviorExtensions>
        <add name="customHttpBehavior"
             type="ErrorHandlerTest.ErrorHandlerElement, ErrorHandlerTest, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" />
      </behaviorExtensions>
    </extensions>
    <behaviors>
      <serviceBehaviors>
        <behavior name="exceptionHandlerBehaviour">          
          <serviceMetadata httpGetEnabled="true"/>
          <!-- To receive exception details in faults for debugging purposes, set the value below to true.  Set to false before deployment to avoid disclosing exception information -->
          <serviceDebug includeExceptionDetailInFaults="true"/>
          <customHttpBehavior />
        </behavior>
      </serviceBehaviors>
    </behaviors>
    <services>
      <service behaviorConfiguration="exceptionHandlerBehaviour" name="ErrorHandlerTest.Service1">
        <endpoint binding="basicHttpBinding" bindingConfiguration="basic" contract="ErrorHandlerTest.IService1" />
      </service>
    </services>

Contrat De Service

[ServiceContract]
public interface IService1
{
    [OperationContract]
    [FaultContract(typeof(GeneralInternalFault))]
    string GetData(int value);
}

La classe ErrorHandler

public class ErrorHandler : IErrorHandler , IServiceBehavior 
{
public bool HandleError(Exception error)
{
Console.WriteLine("caught exception {0}:",error.Message );
return true;
}
public void ProvideFault(Exception error, MessageVersion version, ref Message fault)
{
if (fault!=null )
{
if (error is ArgumentOutOfRangeException )
{
var fe = new FaultException<GeneralInternalFault>(new GeneralInternalFault("general internal fault."));
MessageFault mf = fe.CreateMessageFault();
fault = Message.CreateMessage(version, mf, fe.Action);
}
else
{
var fe = new FaultException<GeneralInternalFault>(new GeneralInternalFault(" the other general internal fault."));
MessageFault mf = fe.CreateMessageFault();
fault = Message.CreateMessage(version, mf, fe.Action);
}
}
}
public void AddBindingParameters(ServiceDescription serviceDescription, ServiceHostBase serviceHostBase, System.Collections.ObjectModel.Collection<ServiceEndpoint> endpoints, BindingParameterCollection bindingParameters)
{
}
public void ApplyDispatchBehavior(ServiceDescription serviceDescription, ServiceHostBase serviceHostBase)
{
IErrorHandler errorHandler = new ErrorHandler();
foreach (ChannelDispatcherBase channelDispatcherBase in serviceHostBase.ChannelDispatchers)
{
ChannelDispatcher channelDispatcher = channelDispatcherBase as ChannelDispatcher;
if (channelDispatcher != null)
{
channelDispatcher.ErrorHandlers.Add(errorHandler);
}
}
}
public void Validate(ServiceDescription serviceDescription, ServiceHostBase serviceHostBase)
{
}
}

Et le Comportement de l'Extension de l'Élément de

    public class ErrorHandlerElement : BehaviorExtensionElement 
{
protected override object CreateBehavior()
{
return new ErrorHandler();
}
public override Type BehaviorType
{
get { return typeof(ErrorHandler); }
}
}