1

私はWCF サービスでRaygun.ioをセットアップしようとしていますが、サイトの簡単な指示にもかかわらず、うまく動作しません。

アカウントにサインアップし、Mindscape.Raygun4NetNuget 経由でパッケージをインストールしてから、次の方法を試しました。

Web.config アプローチ: config セクションを追加し、Raygun セクションにアフィリエイト キーを追加してから、モジュールを の下に追加しましたsystem.webserver。何も記録されませんでした。

Global.asax アプローチ:RaygunClient global.asax にオブジェクトを 追加してから、例外を送信しようとしましたApplication_Error。何もログに記録されず、内部のブレークポイントApplication_Errorはヒットしませんでした。

IErrorHandler アプローチ:これは実際に Raygun にログを記録するエラーを取得しましたが、独自の問題がありました。

エラーハンドラ:

public class RaygunLogger : IErrorHandler
{
    private RaygunClient _client = new RaygunClient("5xqBOzTBrzIsS++3vsbFZw==");
    public void ProvideFault(Exception error, MessageVersion version, ref Message fault)
    {

    }

    public bool HandleError(Exception error)
    {
        _client.Send(error);
        return false;
    }
}

行動:

public class RaygunServiceBahavior : IServiceBehavior
{

    public void AddBindingParameters(ServiceDescription serviceDescription, ServiceHostBase serviceHostBase, Collection<ServiceEndpoint> endpoints,
        BindingParameterCollection bindingParameters)
    {
    }

    public void ApplyDispatchBehavior(ServiceDescription serviceDescription, ServiceHostBase serviceHostBase)
    {
        IErrorHandler errorHandler = new RaygunLogger();

        foreach (ChannelDispatcher channelDispatcher in serviceHostBase.ChannelDispatchers)
        {
            channelDispatcher.ErrorHandlers.Add(errorHandler);
        }
    }

    public void Validate(ServiceDescription serviceDescription, ServiceHostBase serviceHostBase)
    {

    }
}

動作拡張:

public class RaygunBehaviorExtensionElement : BehaviorExtensionElement
{
    public override Type BehaviorType
    {
        get { return typeof(RaygunServiceBahavior); }
    }

    protected override object CreateBehavior()
    {
        return new RaygunServiceBahavior();
    }
}

例外がスローされ、Handle_Errorメソッドが呼び出されてエラーが Raygun に送信されますが、常に 1 つではなく 2 つの例外が送信されます。最初の例外はObjectDisposedException: The message object has been disposed.

WCF で Raygun をセットアップできた人はいますか? もしそうなら、あなたは同じ行動をしていますか、それとも私が違うことをしていることがわかりますか?

4

1 に答える 1

0

私は非常に似たようなことをしようとしましたが、Mindscape.Raygun4Net.Builders.RaygunRequestMessageBuilder.GetIpAddress(HttpRequest request) に由来する IErrorHandler の HandleError() メソッドを再入可能にしました。

オブジェクトが破棄された例外ではなく、System.Argument 例外が発生しました。

   at System.ServiceModel.Dispatcher.ErrorBehavior.HandleErrorCommon(Exception error, ErrorHandlerFaultInfo&amp;amp; faultInfo)</StackTrace><ExceptionString>System.ArgumentException: Value does not fall within the expected range.
   at System.Runtime.InteropServices.Marshal.ThrowExceptionForHRInternal(Int32 errorCode, IntPtr errorInfo)
   at System.Web.Hosting.IIS7WorkerRequest.GetServerVariableInternal(String name)
   at System.Web.HttpRequest.AddServerVariableToCollection(String name)
   at System.Web.HttpRequest.FillInServerVariablesCollection()
   at System.Web.HttpServerVarsCollection.Get(String name)
   at Mindscape.Raygun4Net.Builders.RaygunRequestMessageBuilder.GetIpAddress(HttpRequest request)

しかし、私はまだ解決策を持っていません。

于 2015-02-04T19:32:21.993 に答える