2011-08-24 16 views
5

Abbiamo un requisito in cui vorremmo reindirizzare l'utente a una pagina di accesso quando la sessione ASP.NET scade e l'utente sta lavorando in un plug-in Silverlight.Timeout sessione Silverlight, RIA e ASP.Net

Quindi, lo scenario è, abbiamo un'applicazione legacy che esegue ASP.Net, tutti i nostri nuovi moduli sono in Silverlight e l'applicazione legacy carica l'applicazione Silverlight. Tutto funziona :-) L'utente si allontana dalla propria scrivania e ritorna dopo che la sessione ASP.Net è scaduta, ma poi tenta di continuare a fare qualcosa nell'app Silverlight, che utilizza un servizio dominio RIA. Poiché la sessione ha un timeout, il servizio dominio RIA fallisce, ma non fallisce con un'eccezione SessionExpired, né con un utente/password non valido, fallisce semplicemente con un'eccezione di dominio simile alle eccezioni "reali" generate nel dominio modello quindi non abbiamo modo di identificare che questa volta è stato perché la sessione è scaduta.

Ci sono molte risposte su come mantenere viva la sessione ASP.Net, non vogliamo farlo, vogliamo che la sessione scada, ma vogliamo essere in grado di gestirlo con garbo in Silverlight e indirizzare l'utente a la pagina di accesso.

Abbiamo questo funzionamento, ma il problema è quando un'eccezione viene sollevata nell'applicazione Silverlight, questo reindirizza alla pagina di accesso, che non è il comportamento previsto. Vogliamo solo reindirizzare quando è la scadenza della sessione.

Qualche idea?

risposta

2

Ho appena avuto lo stesso problema. Ho aggiunto il seguente codice al Application_UnhandledException:

private void Application_UnhandledException(object sender, ApplicationUnhandledExceptionEventArgs e) 
{ 
    // redirect to login on exceptions when user is not logged in 
    var domainException = e.ExceptionObject as DomainOperationException; 
    if (domainException != null && !WebContext.Current.User.IsAuthenticated) 
    { // probably a server-side timeout has occurred. 
     e.Handled = true; 
     HtmlPage.Document.Submit(); // redirect to login page 
    } 
} 

Ogni volta che c'è un'eccezione di dominio e l'utente non è connesso a (presumo che l'utente deve essere registrato per vedere qualsiasi pagina), che reindirizzare al chiamata a pagina che causa il reindirizzamento di ASP.NET alla pagina di accesso.

MODIFICA: questa soluzione è utile quando si utilizza un modulo di accesso .aspx (che normalmente utilizzo per impedire a un utente non autenticato di scaricare il codice Silverlight). Nel caso in cui si utilizza un modulo di registrazione Silverlight, si trova la risposta qui https://stackoverflow.com/a/8083744/178620.

+0

Si dovrebbe portare su RegistrationWindow, piuttosto che provare a ricaricare HtmlPage. Questa è una risposta molto migliore: http://stackoverflow.com/a/8083744/178620 –

+0

Grazie mille per il tuo suggerimento. Hai ragione se usi una finestra di login/registrazione di Silverlight. Preferisco usare l'autenticazione per moduli di asp.net e un webform HTML per il login, perché un utente malintenzionato non può scaricare l'applicazione Silverlight senza effettuare l'accesso. In queste circostanze la mia risposta è ancora corretta e la preferisco alla tua soluzione. – slfan

+0

Vedo da dove vieni ora: la domanda specifica RIA e la maggior parte delle persone utilizzerà solo RegistrationWindow. Se non ti dispiace aggiornare la tua risposta con la tua prospettiva, sarò in grado di togliere il voto negativo. –

Problemi correlati