2011-08-24 65 views
5

当ASP.NET会话过期并且用户正在使用Silverlight插件时,我们希望将用户重定向到登录页面。Silverlight,RIA和ASP.Net会话超时

所以,场景是,我们有一个运行ASP.Net的遗留应用程序,我们所有的新模块都在Silverlight中,旧应用程序加载Silverlight应用程序。这一切都有效:-)然后,用户离开桌面并在ASP.Net会话超时后返回,但随后尝试继续在使用RIA域服务的Silverlight应用程序中执行某些操作。由于会话超时,RIA域服务失败,但它不会因SessionExpired异常而失败,也不会失效,它只会失败,并且域异常与域中抛出的“真实”异常类似模型,所以我们无法确定这次是因为会话过期。

关于如何让ASP.Net会话保持活动状态,我们不想这样做,我们希望会话过期,但我们希望能够在Silverlight中正常处理它,并指导用户登录页面。

我们有这个工作,但问题是无论何时在Silverlight应用程序中引发异常,这会将您重定向到登录页面,这不是预期的行为。我们只想在会话过期的情况下重定向。

任何想法?

回答

2

我碰巧碰到同样的问题。我下面的代码添加到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

+0

您应该调用RegistrationWindow,而不是尝试重新加载HtmlPage。这是一个更好的答案:http://stackoverflow.com/a/8083744/178620 –

+0

非常感谢您的提示。如果您使用Silverlight登录/注册窗口,则是正确的。我更愿意使用asp.net表单身份验证和HTML网络表单进行登录,因为恶意用户无法登录就无法下载Silverlight应用程序。在这种情况下,我的答案仍然正确,我更喜欢您的解决方案。 – slfan

+0

我看到你现在从哪里来 - 这个问题指定了RIA,大多数人只会使用RegistrationWindow。如果您不介意以您的观点更新您的答案,我将能够取消投票。 –