Настройка Raygun на службе WCF REST
Я пытаюсь настроить https://raygun.io/ на сервис WCF, и, несмотря на простые инструкции на сайте, мне не везет.
Я подписался на свой аккаунт, установил Mindscape.Raygun4Net
пакет через Nuget, затем попробовал следующие методы:
Подход 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
,
Кому-нибудь повезло с настройкой Raygun на WCF? Если да, то у вас такое же поведение или вы видите, что я делаю по-другому?
1 ответ
Я попытался сделать что-то очень похожее и закончил с повторным входом в мой метод IErrorHandler HandleError(), происходящий из Mindscape.Raygun4Net.Builders.RaygunRequestMessageBuilder.GetIpAddress(запрос HttpRequest)
Вместо того, чтобы исключить объект, он вызвал исключение System.Argument:
at System.ServiceModel.Dispatcher.ErrorBehavior.HandleErrorCommon(Exception error, ErrorHandlerFaultInfo&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)
У меня пока нет решения, однако.