1

我正在尝试在 WCF 服务上设置Raygun.io,尽管网站上有简单的说明,但让事情运行起来几乎没有运气。

我已经注册了我的帐户,Mindscape.Raygun4Net通过 Nuget 安装了软件包,然后尝试了以下方法:

Web.config 方法: 我添加了 config 部分,Raygun 部分和我的附属密钥,然后在system.webserver. 没有任何记录。

Global.asax 方法: 我尝试向RaygunClientglobal.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,但它总是发送两个异常而不是一个。第一个例外是ObjectDisposedException: The message object has been disposed.

有没有人幸运地在 WCF 上设置了 Raygun?如果是这样,您是否有相同的行为,或者您能看到我做的任何不同的事情吗?

4

1 回答 1

0

我尝试做一些非常相似的事情,最终我的 IErrorHandler 的 HandleError() 方法重新进入,源自 Mindscape.Raygun4Net.Builders.RaygunRequestMessageBuilder.GetIpAddress(HttpRequest request)

它导致了 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 回答