kat*_*tit 5 .net c# wcf ierrorhandler
可能是微不足道的问题..我想实现我自己的错误处理程序来记录错误并监视正在发生的事情.此时我不想向客户提供自己的错误.我希望它是透明的 - 就像默认的WCF行为一样.我应该如何ProvideFault实现这一目标?
namespace IDATT.Web.Services
{
using System;
using System.ServiceModel.Channels;
using System.ServiceModel.Dispatcher;
public class MyServiceErrorHandler : IErrorHandler
{
public void ProvideFault(Exception error, MessageVersion version, ref Message fault)
{
// ????
}
public bool HandleError(Exception error)
{
return true;
}
}
}
Run Code Online (Sandbox Code Playgroud)
您可以将其留空。我这样做是为了毫无问题地将错误记录到 Elmah。
编辑
我对此完全错误。查看我的实现后,我执行以下操作。正如您所看到的,HandleError该方法基本上是空的,并且日志记录发生在ProvideFault.
public class ElmahErrorHandler : IErrorHandler
{
public bool HandleError(Exception error)
{
return false;
}
public void ProvideFault(Exception error, MessageVersion version, ref Message fault)
{
if (error == null)
{
return;
}
ErrorSignal.FromCurrentContext().Raise(error);
}
}
Run Code Online (Sandbox Code Playgroud)
返回true会让HandleErrorWCF认为没有发生错误。这意味着如果您只是记录错误,则应该始终返回false. 如果错误未处理,ProvideFault则调用该错误,这就是您要进行日志记录的位置。您不需要提供故障消息。