0
我想捕获发送到我的WCF4 Web服务(REST)和当前所有错误请求(可能是xml/json中的错误)的所有“http 400错误请求”错误仅重定向到通用IIS 400错误请求错误页。如何捕获和记录ASP.NET/WCF错误的请求错误?
Global.asax中的Application_Error或IIS中的自定义覆盖400错误页面处理程序均未调用。
那么有没有其他方法可以捕获WCF中的错误?
我想捕获发送到我的WCF4 Web服务(REST)和当前所有错误请求(可能是xml/json中的错误)的所有“http 400错误请求”错误仅重定向到通用IIS 400错误请求错误页。如何捕获和记录ASP.NET/WCF错误的请求错误?
Global.asax中的Application_Error或IIS中的自定义覆盖400错误页面处理程序均未调用。
那么有没有其他方法可以捕获WCF中的错误?
我一直在我自己和我已经整理它是通过使System.ServiceModel.Dispatcher.IErrorHandler的实现方式看这个:
public class EventLogErrorHandler : BehaviorExtensionElement, IErrorHandler, IServiceBehavior
{
public void ProvideFault(Exception error, MessageVersion version, ref Message fault)
{
var log = new EventLog("APPLICATION",Environment.MachineName, "SomeSourceName");
log.WriteEntry("PROVIDING FAULT", EventLogEntryType.Information);
}
public bool HandleError(Exception error)
{
var log = new EventLog("APPLICATION", Environment.MachineName, "SomeSourceName");
log.WriteEntry(error.ToString(), EventLogEntryType.Error);
return true;
}
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)
{
foreach (var dispatcher in serviceHostBase.ChannelDispatchers)
(dispatcher as ChannelDispatcher).ErrorHandlers.Add(this);
}
protected override object CreateBehavior()
{
return new EventLogErrorHandler();
}
public override Type BehaviorType
{
get { return GetType(); }
}
}
然后我就可以将其添加到系统
<extensions>
<behaviorExtensions>
<add name="errorhandler" type="SomeAssembly.SomeNamespace.EventLogErrorHandler, SomeAssembly, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"/>
</behaviorExtensions>
</extensions>
的最后加上这种行为您服务行为,当任何形式的出现错误,你可以把正确的逻辑来处理,你认为合适:
类似下面的扩展标记内.serviceModel标签...
<errorhandler />
</behavior>
</serviceBehaviors>
</behaviors>
希望这有助于
安德鲁