2011-08-24 15 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がログインページにリダイレクトされる呼び出しページ。

EDIT:このソリューションは、(通常は認証されていないユーザーによるSilverlightコードのダウンロードを防ぐために)通常使用する.aspxログインフォームを使用する場合に便利です。 Silverlight登録フォームを使用している場合は、ここで回答が見つかりますhttps://stackoverflow.com/a/8083744/178620

+0

HtmlPageをリロードするのではなく、RegistrationWindowを呼び出す必要があります。これははるかに良い答えです:http://stackoverflow.com/a/8083744/178620 –

+0

あなたのヒントをありがとうございます。 Silverlightログイン/登録ウィンドウを使用している場合は正しいです。悪意のあるユーザーはログインせずにSilverlightアプリケーションをダウンロードできないため、asp.netフォーム認証とHTML Webフォームを使用することをお勧めします。このような状況では、私の答えは正しいです。 – slfan

+0

あなたは今どこから来ているのか分かります。質問にはRIAが指定されており、ほとんどの人はRegistrationWindowを使用します。あなたの視点であなたの答えを更新する気にならないなら、私は投票を取り除くことができます。 –

関連する問題