2012-02-17 4 views
0

내가 처리되지 않은 예외를 기록하는 상태 모니터링을 사용하고 싶습니다 그 나는 내 자신의 오류 처리기에서 트랩 : 나는 순간 매우 간단한 사용자 정의 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는 발생시킬 수 없습니다.

+1

는 윈도우 서버 AppFabric은 IIS에 연결처럼 당신이 뭔가를 열 수 있습니까? WCF 및 WF 서비스에 대한 놀라운 모니터링 서비스입니다. 당신이 그것에 열리는 경우에 나는 정보 더를 가진 응답을 배치 할 것이다. –

+0

AppFabric에 관심이 많습니다. 나는 IIS7.5에서 현재 Windows Server 2008 R2를 호스팅하고 있지만 AppFabric에서 호스팅하는 것에 대해 더 많이 알아야합니다. (설치되어 있지만 그 정도까지는 있습니다 :)). – Bullines

답변

0

OK, 내가 AppFabric 내가 대신 몇 가지 유용한 링크를 게시거야 상황에서 작업을 얻기위한 지침을 넣어하는 것이 다소 중복 될 수 있기 때문에, 그래서. 윈도우 프로그램에서 - 당신이해야합니다

우선 애플리케이션 서버 패브릭 구성 응용 프로그램의 모니터링 데이터베이스를 구성합니다.

설정 : @RonJacobs에 의해이 링크에서 - 그 사람을 사랑, 감사 론은 모든 당신이 할 - 그는 IIS에서 모든 설정에 대한 몇 가지 훌륭한 세부 사항을 제공합니다. 가장 흥미로운 부분은 엔드 투 엔드 추적 사용 - http://blogs.msdn.com/b/rjacobs/archive/2010/06/09/tracking-wcf-data-services-with-windows-server-appfabric.aspx입니다.

문제 해결 : 당신이 처음에 실행 일단이 링크에 어떤 좋은 문제 해결 정보가 - http://www.lhotka.net/weblog/WindowsServerAppFabricAndWCFMonitoring.aspx.

은 문제가 발생하면 알려주세요 그리고 내가 할 수있는만큼 도움이됩니다!

+0

정보 주셔서 감사합니다! 내가 찾지 못한 한 가지는보고 데이터베이스를 설정하는 프로세스입니다. 이상적으로는 웹 서비스를 호스팅하는 시스템과 다른 시스템에서 데이터베이스를 호스팅하고 싶습니다. 예를 들어 AppFabric을 이미 웹 서버에 설치 한 경우 web.config에서보고 데이터베이스 서버에 연결 문자열을 제공하기 만하면됩니까 (데이터베이스 서버에 전체 AppFabric 설치가 필요합니까)? – Bullines

+0

@Bullines 즉, 데이터베이스는 사용 가능한 SQL 서버에있을 수 있으며 AppFabric은 IIS 서버에만 설치하면됩니다. AppFabric 구성 마법사를 찾는 데 문제가 있습니까? 다음은 [link] http://www.nagarro.com/blog/windows-server-appfabric/을 방문하는 링크입니다. –

+0

모양에서 AppFabric을 다시 설치해야 구성 마법사가 다시 나타납니다. – Bullines