在WCF REST服务上设置Raygun

时间:2014-10-02 13:28:52

标签: wcf error-handling raygun.io raygun

我试图在WCF服务上设置Raygun.io,尽管网站上有简单的说明,但运气不佳。

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

Web.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,但它总是发送两个异常而不是一个异常。第一个例外是ObjectDisposedException: The message object has been disposed

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

1 个答案:

答案 0 :(得分: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)

然而,我还没有解决方案。