Używam SignalR hub w mojej aplikacji MVC4. Dodałem ELMAH do obsługi wszystkich błędów. Problem polega na tym, że błędy, które zdarzają się w centrum, nie są rejestrowane w aksjomie ELMAH. Czy istnieje sposób, aby to skonfigurować?Jak skonfigurować ELMAH z SignalR
14
A
Odpowiedz
9
Musisz dodać HubPipelineModule
, a także upewnić się, że ustawiłeś ApplicationName w Twoim elemencie errorLog, W przeciwnym razie Elmah nie będzie w stanie zarejestrować błędu, ponieważ nie będzie miał HttpContext lub AppName do logowania do .
<errorLog type="Elmah.SqlErrorLog, Elmah" applicationName="MyAppName" connectionStringName="myConnString" />
HubPipelineModule code I've used jest następujący:
public class ElmahPipelineModule : HubPipelineModule
{
private static bool RaiseErrorSignal(Exception e)
{
var context = HttpContext.Current;
if (context == null)
return false;
var signal = ErrorSignal.FromContext(context);
if (signal == null)
return false;
signal.Raise(e, context);
return true;
}
private static void LogException(Exception e, IHubIncomingInvokerContext invokerContext)
{
var context = HttpContext.Current;
ErrorLog el = ErrorLog.GetDefault(context);
el.Log(new Error(e));
}
protected override void OnIncomingError(Exception ex, IHubIncomingInvokerContext context)
{
var exception = ex;
if (ex is TargetInvocationException)
{
exception = ex.InnerException;
}
else if (ex is AggregateException)
{
exception = ex.InnerException;
}
if (!RaiseErrorSignal(exception))
LogException(exception, context);
}
}
Upewnij się dodać moduł do rurociągu piasta:
GlobalHost.HubPipeline.AddModule(new ElmahPipelineModule());
EDIT
SignalR 2+
Zauważyłem, że żaden z moich wyjątków SignalR nie był rejestrowany w ostatnim projekcie, nad którym pracowałem, i odkryłem, że wyjątek ArgumentNullException jest generowany podczas próby pobrania ErrorSignal z bieżącego kontekstu. Następująca metoda prawidłowo radzi sobie z tym wyjątkiem, aby ponownie rejestrować błędy SignalR.
private static bool RaiseErrorSignal(Exception e)
{
var context = HttpContext.Current;
if (context == null)
return false;
try
{
var signal = ErrorSignal.FromCurrentContext();
if (signal == null)
return false;
signal.Raise(e, context);
return true;
}
catch (ArgumentNullException)
{
return false;
}
}
Powiązane problemy
- 1. Nie można skonfigurować pocztę ELMAH
- 2. Czy można całkowicie skonfigurować ELMAH w kodzie?
- 3. Jak skonfigurować Elmah za pomocą interfejsu ASP.NET Web API
- 4. ELMAH z wieloma aplikacjami
- 5. ELMAH na ASP.NET vNext?
- 6. Jak skonfigurować ELMAH do pracy z Windows Azure? Dostaję 404 na Elmah.axd
- 7. Jak zabezpieczyć Elmah na ASP.Net MVC 4 z Windows Zintegrowane zabezpieczenia: Elmah ignoruje moje ustawienia
- 8. Elmah: Jak zalogować dane formularza?
- 9. Gdzie ELMAH zapisuje swoje dane?
- 10. Usługa WCF z SignalR
- 11. SignalR z vNext
- 12. Wysyłanie wyników ELMAH przez NLog
- 13. ELMAH - Filtrowanie 404 błędów
- 14. Elmah rejestruje tylko 15 błędów
- 15. Jak ograniczyć połączenia z serwerem SignalR?
- 16. Jak sprawić, by SignalR działał z RequireJS?
- 17. Jak uzyskać SignalR w pracy z Suave?
- 18. Jak korzystać z ogólnego koncentratora w SignalR
- 19. Niestandardowe dane Elmah YSOD
- 20. signalR:/signalr/hubs nie jest generowany
- 21. SignalR w połączeniu z Breeze
- 22. Konfiguracja Elmah z SQL Server 2008
- 23. Logowanie użytkownika z Elmah dla WCF Webservices
- 24. Jak mogę ograniczyć dostęp zdalny do Elmah?
- 25. Jak rejestrować informacje za pomocą Elmah
- 26. ELMAH filtrowanie nie działa
- 27. Jak skonfigurować Syntastic z JSHint?
- 28. Jak skonfigurować xdebug z WAMP
- 29. Jak skonfigurować metaspace z SBT
- 30. Jak skonfigurować Beanstalkd z PHP
Dla każdego, kto utknął na ostatnim kroku, dodaj ostatnią linię do klasy RegisterHubs. Na przykład: 'public static void Start() {RouteTable.Routes.MapHubs(); GlobalHost.HubPipeline.AddModule (nowy Shopperscape.Web.API.ElmahPipelineModule()); } ' – Chris
@Chris Czy to działa dla SignalR 1.x? –
@Giles - ten kod jest dla SignalR 1 – damienc88