Me gustaría poner en práctica la costumbre IErrorHandler y utilizar log4net
[AttributeUsage (AttributeTargets.Interface)]
public class ErrorPolicyBehaviorAttribute : Attribute, IContractBehavior, IErrorHandler
{
private ILog m_logger;
#region IErrorHandler
public void ProvideFault (Exception error, MessageVersion version, ref Message fault)
{
return;
}
public bool HandleError (Exception error)
{
m_logger.Error (error.Message, error);
return true;
}
#endregion
#region IContractBehavior
public void ApplyDispatchBehavior (ContractDescription contractDescription, ServiceEndpoint endpoint, DispatchRuntime dispatchRuntime)
{
...init logger
......Add this class to a list of dispatchRuntime.ChannelDispatcher.ErrorHandlers...
}
#endregion
}
Esta clase también implementa IContractBehavior, por lo que puede usarlo como atributo en sus contratos de servicio.
[ErrorPolicyBehavior]
public interface IYourServiceContract
{ }
log4net es bastante flexible, por lo que puede registrar lo que necesita y cuando lo necesita.
Consulte el siguiente enlace para configurar log4net con WCF. En cada webmethod puede agregar información de solicitud y respuesta al archivo de registro. [http://paulthecyclist.com/tag/log4net/](http://paulthecyclist.com/tag/log4net/) – shazia
Gracias por el enlace Shazia. El enlace real debería ser: http://paulthecyclist.com/2012/04/06/catch-all-wcf-errors/ though. – PaulTheCyclist