Тайм-ауты сессий Silverlight, RIA & ASP.Net - PullRequest
5 голосов
/ 24 августа 2011

У нас есть требование, при котором мы хотим перенаправить пользователя на страницу входа, когда истекает срок сеанса ASP.NET и пользователь работает в плагине Silverlight.

Итак, сценарий таков: у нас есть старое приложение, которое работает на ASP.Net, все наши новые модули находятся в Silverlight, а старое приложение загружает приложение Silverlight. Это все работает :-) Затем пользователь уходит со своего рабочего стола и возвращается после истечения времени сеанса ASP.Net, но затем пытается что-то сделать в приложении Silverlight, которое использует доменную службу RIA. Поскольку время сеанса истекло, служба домена RIA завершается с ошибкой, но не с ошибкой SessionExpired или с неверным именем пользователя / паролем, она просто завершается с исключением домена, которое похоже на «реальные» исключения, генерируемые в домене. модель, поэтому мы не можем определить, что на этот раз это произошло потому, что сеанс истек.

Существует множество ответов на вопрос о том, как сохранить ваш сеанс ASP.Net живым, мы не хотим этого делать, мы хотим, чтобы сеанс истек, но мы хотим иметь возможность обрабатывать его изящно в Silverlight и направлять пользователя к страница входа.

У нас это работает, но проблема в том, что всякий раз, когда в приложении Silverlight возникает исключение, это перенаправляет вас на страницу входа, что не является предполагаемым поведением. Мы хотим перенаправить только в случае истечения сеанса.

Есть идеи?

1 Ответ

2 голосов
/ 01 декабря 2011

У меня просто случилась такая же проблема.Я добавил следующий код в 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
    }
}

Всякий раз, когда возникает исключение домена, и пользователь не вошел в систему (я предполагаю, что пользователь должен войти в систему, чтобы увидеть любую страницу), я перенаправляюна вызывающую страницу, которая приводит к перенаправлению ASP.NET на страницу входа в систему.

РЕДАКТИРОВАТЬ: Это решение полезно, когда вы используете форму входа в систему .aspx (которую я обычно использую для предотвращения загрузки Silverlight неаутентифицированным пользователемкод).Если вы используете регистрационную форму Silverlight, вы найдете ответ здесь https://stackoverflow.com/a/8083744/178620.

...