2011-08-24 23 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。如果您不介意以您的觀點更新您的答案,我將能夠取消投票。 –