avrei implementare personalizzati IErrorHandler e utilizzare 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
}
Questa classe implementa anche IContractBehavior, quindi è possibile utilizzarlo come attributo sui contratti di servizio.
[ErrorPolicyBehavior]
public interface IYourServiceContract
{ }
log4net è abbastanza flessibile, quindi è possibile registrare ciò che è necessario e quando è necessario.
Fare riferimento al seguente collegamento per l'impostazione di log4net con WCF. In ogni webmethod è possibile aggiungere informazioni di richiesta e risposta al file di registro. [http://paulthecyclist.com/tag/log4net/](http://paulthecyclist.com/tag/log4net/) – shazia
Grazie per il link Shazia. Il link effettivo dovrebbe essere: http://paulthecyclist.com/2012/04/06/catch-all-wcf-errors/ però. – PaulTheCyclist