2013-07-30 9 views
5

Mam aplikację SignalR z klientem .NET. Gdy wystąpi błąd na serwerze, muszę być w stanie obsłużyć to po stronie klienta. Jest to jednak trochę trudne, ponieważ Signalr zawsze zawija wszystkie wyjątki do "InvalidOperationException" z komunikatem typu "UnknownUserException został zgłoszony ...", zamiast faktycznie daje mi UnknownUserException.SignalR - Wyjątki Propagacja do klienta

Nie jestem pewien, jak to zrobić?

Przykładem, który nie działa w tej chwili (od InvalidOperationException jest wyrzucane zamiast właściwie wyjątku):

try 
{ 
    await this.hubProxy.Invoke<Guid>("Authenticate", nww object[] { userName, languageCode, credentials }); 
} 
catch(UnknownUserException ex) 
{ 
    Toast.Dislay("Invalid UserName."); 
} 
catch(ConnectionError ex) 
{ 
    Toast.Dislay("Connection Error.");  
} 

Odpowiedz

3

Na serwerze można włączyć szczegółowe błędy:

Routes.RouteTable.MapHubs(new HubConfiguration 
{ 
    EnableDetailedErrors = true 
}); 

Należy pamiętaj, że robiąc to, błędy zgłaszane na serwerze zostaną przekazane klientom, co może ujawnić pewne niezamierzone luki w implementacji po stronie serwera (tylko FYI).

+0

Czy jest jakiś sposób, w jaki mogę przechwycić wyjątek i tylko propagować wyjątki, które znam w bezpieczny sposób, i zawijać wszystkie inne? – ronag

+0

W pewnym sensie można utworzyć moduł potoku piasty: http://www.asp.net/signalr/overview/hubs-api/hubs-api-guide-server#hubpipeline, a następnie powiązać go z takimi funkcjami jak BuildIncoming, aby wykonać funkcje koncentratora i wychwytywanie wyjątków, które są rzucane i decydowanie, czy je przesłać –

+0

Dodałem: 'RouteTable.Routes.MapHubs (new HubConfiguration {EnableDetailedErrors = true, EnableCrossDomain = true});' w 'Application_Start' i ponownie wykorzystałem pulę aplikacji. Nadal otrzymuję 'InvalidOperationException' zamiast rzeczywistych wyjątków. Coś, co mogłem ominąć? – ronag