내가 처리되지 않은 예외를 기록하는 상태 모니터링을 사용하고 싶습니다 그 나는 내 자신의 오류 처리기에서 트랩 : 나는 순간 매우 간단한 사용자 정의 WebRequestErrorEvent을 사용하고상태 모니터링 및 WCF
public class MyErrorHandler : IErrorHandler, IServiceBehavior
{
#region IServiceBehavior Members
public void AddBindingParameters(ServiceDescription serviceDescription, System.ServiceModel.ServiceHostBase serviceHostBase, System.Collections.ObjectModel.Collection endpoints, BindingParameterCollection bindingParameters)
{
}
public void ApplyDispatchBehavior(ServiceDescription serviceDescription, System.ServiceModel.ServiceHostBase serviceHostBase)
{
IErrorHandler errorHandler = new VirusInfoErrorHandler();
foreach (ChannelDispatcherBase channelDispatcherBase in serviceHostBase.ChannelDispatchers)
{
ChannelDispatcher channelDispatcher = channelDispatcherBase as ChannelDispatcher;
if (channelDispatcher != null)
{
channelDispatcher.ErrorHandlers.Add(errorHandler);
}
}
}
public void Validate(ServiceDescription serviceDescription, System.ServiceModel.ServiceHostBase serviceHostBase)
{
}
#endregion
#region IErrorHandler Members
public bool HandleError(Exception ex)
{
MyErrorEvent l_errEvt = new MyErrorEvent("Oh Noes!", this, WebEventCodes.WebExtendedBase + 2, ex);
// Always throws a "Value does not fall within the expected range" ArgumentException.
l_errEvt.Raise();
return true;
}
public void ProvideFault(Exception error, MessageVersion version, ref Message fault)
{
}
#endregion
}
:
public MyErrorEvent(string message, object eventSource, int eventCode, Exception exception)
: base(message, eventSource, WebEventCodes.WebExtendedBase + eventCode, exception)
{
}
public override void FormatCustomEventDetails(WebEventFormatter formatter)
{
if (formatter == null)
{
throw new ArgumentNullException("formatter", "Please supply a valid formatter object.");
}
try
{
base.FormatCustomEventDetails(formatter);
formatter.AppendLine("this was a bad error");
}
catch (Exception ex)
{
}
}
예외의 스택 추적은 다음과 같습니다
at System.Runtime.InteropServices.Marshal.ThrowExceptionForHRInternal(Int32 errorCode, IntPtr errorInfo)
at System.Web.Hosting.IIS7WorkerRequest.GetServerVariableInternal(String name)
at System.Web.HttpRequest.get_UrlInternal()
at System.Web.Management.WebRequestInformation..ctor()
at System.Web.Management.WebRequestErrorEvent.PreProcessEventInit()
at System.Web.Management.WebBaseEvent.RaiseInternal(WebBaseEvent eventRaised, ArrayList firingRuleInfos, Int32 index0, Int32 index1)
at System.Web.Management.WebBaseEvent.Raise(WebBaseEvent eventRaised)
at System.Web.Management.WebBaseEvent.Raise()
at ACME.MyErrorHandler.HandleError(Exception ex) in G:\Code\MySvc\Lib\ACME.ErrorHandler\MyErrorHandler.cs:line 78
at System.ServiceModel.Dispatcher.ErrorBehavior.HandleErrorCommon(Exception error, ErrorHandlerFaultInfo& faultInfo)
가 WebRequestErrorEvent가 함께 사용할 수 없습니다 WCF? 문제없이 WebRequestEvents를 발생시킬 수는 있지만 WebRequestErrorEvents는 발생시킬 수 없습니다.
는 윈도우 서버 AppFabric은 IIS에 연결처럼 당신이 뭔가를 열 수 있습니까? WCF 및 WF 서비스에 대한 놀라운 모니터링 서비스입니다. 당신이 그것에 열리는 경우에 나는 정보 더를 가진 응답을 배치 할 것이다. –
AppFabric에 관심이 많습니다. 나는 IIS7.5에서 현재 Windows Server 2008 R2를 호스팅하고 있지만 AppFabric에서 호스팅하는 것에 대해 더 많이 알아야합니다. (설치되어 있지만 그 정도까지는 있습니다 :)). – Bullines