Мониторинг здоровья и WCF - PullRequest
       18

Мониторинг здоровья и WCF

0 голосов
/ 17 февраля 2012

Я хотел бы использовать мониторинг работоспособности для регистрации необработанных исключений, которые я перехватываю в своем собственном обработчике ошибок:


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    
}

В настоящее время я использую очень простой пользовательский WebRequestErrorEvent:


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 Ответ

0 голосов
/ 17 февраля 2012

ОК, так как для меня может быть несколько излишним выкладывать инструкции для работы AppFabric в вашей ситуации, я вместо этого опубликую несколько полезных ссылок.

Первое, что вам нужно сделать, это настроить базу данных мониторинга в приложении конфигурации AppServer Fabric - в разделе Программы Windows.

Настройка: В этой ссылке @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.

Дайте мне знать, если у вас возникнут какие-либо проблемы, и я помогу, насколько смогу!

...