2013-07-30 12 views
5

Ho un'applicazione SignalR con un client .NET. Quando si verifica un errore sul server, devo essere in grado di gestirlo sul lato client. Tuttavia, questo è un po 'difficile in quanto Signalr avvolge sempre tutte le eccezioni in una "InvalidOperationException" con un messaggio come "UnknownUserException è stato lanciato ...", invece di darmi effettivamente il UnknownUserException.SignalR - Propagazione delle eccezioni al client

Non sono sicuro di come procedere?

Un esempio che non funziona in questo momento (dal InvalidOperationException è gettato anziché l'eccezione actualy):

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.");  
} 

risposta

3

Sul server è possibile attivare gli errori dettagliati:

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

Tenete La mente, facendo questo errore gettato sul server, verrà passato ai client che potrebbero rivelare alcune vulnerabilità involontarie nell'implementazione lato server (solo una FYI).

+0

C'è un modo per aggirare la gestione delle eccezioni e solo propagare eccezioni che conosco in modo sicuro e avvolgere tutte le altre? – ronag

+0

Tipo di, è possibile creare un modulo pipeline hub: http://www.asp.net/signalr/overview/hubs-api/hubs-api-guide-server#hubpipeline e quindi collegarsi a cose come BuildIncoming per eseguire le funzioni hub e prendere le eccezioni che vengono lanciate e decidere se propogarle –

+0

Ho aggiunto, 'RouteTable.Routes.MapHubs (nuovo HubConfiguration {EnableDetailedErrors = true, EnableCrossDomain = true});' in 'Application_Start' e riciclato il mio pool di app. Ancora ottenendo 'InvalidOperationException' invece delle effettive eccezioni. Qualcosa che mi sarei perso da fare? – ronag

Problemi correlati