7

BlazeDSを実行しているTomcatサーバーにサービス呼び出しを行うflexクライアントがあります。この環境でサーバーセッションのタイムアウトを適切に処理したいと思います。

サービスにセキュリティ上の制約があるため、クライアントは、宛先に基づいてChannelSetを初期化し、そのChannelSetを使用してログインすることにより、リモートオブジェクトに対して認証を行います。

ユーザーが認証された後、(長い)コーヒーを飲みに行くと、セッションは必然的にタイムアウトになります。

クライアントにタイムアウトを検出してもらい、適切な情報メッセージを表示してユーザーをログインページに戻したいと思います。

しかし、クライアントからこのタイムアウトを検出するための最良の方法を見つけるのに苦労しています。それは可能ですか、それともタイムアウトが発生したときにサーバーにエラーをスローさせる必要がありますか?

ありがとう!

4

8 に答える 8

1

サーバーに絶えずpingを実行するカスタムUIサービスを実装し(10分ごとに1 ping)、AppServerが接続をシャットダウンしないようにしました。また、UIを呼び出してログインに戻り、「クライアントが非アクティブであるためにセッションが期限切れになりました」と表示する完全な関数を使用して、要求が行われるたびにドロップされる内部UIタイマー(「ping」タイマーを除く)を実行します。

于 2010-10-22T08:31:55.340 に答える
1

キーストロークとマウス イベントをキャプチャするクライアント用のカスタム コンポーネントを作成し、クライアントでタイムアウトを処理します。

于 2010-06-07T03:29:55.620 に答える
1

これは BlazeDS に固有のものではありませんが、Flex 4.5 (おそらくそれ以前) の時点では、タイムアウト エラーの障害イベントに特定の障害コードがあります。

障害ハンドラーで:

if(faultEvent.fault.faultCode == "Client.Error.RequestTimeout"){
  trace("TIMEOUT ERROR");
}
于 2011-06-30T19:27:09.887 に答える
0

サーバー側に FlexSessionListener インターフェイスを実装します。Flex セッションの作成 / 破棄が実際に行われる前に処理する方法を提供します。

sessionDestroyed ハンドラーで、メッセージング Producer を使用して、サーバーからクライアントにメッセージを送信し、セッションがタイムアウトしようとしていることをクライアントに知らせます。

于 2010-08-05T17:33:51.013 に答える
0

私のプロジェクトの1つでこの問題が発生しました。それを克服するために私がしたことは、RemoteObjectまたはHTTPServiceを介してクライアントがサーバーにアクセスするたびに、最初にユーザーの認証をチェックし、すでにタイムアウトしている場合は何かを返し、問題がなければプロセスを続行します。クライアント側の応答ハンドラの結果イベントで、クライアントは応答がタイムアウトかどうかを確認し、タイムアウトの場合は再度ログイン ページに転送します。私の知る限り、ユーザーのセッションがタイムアウトしたときにサーバーがクライアントにエラーをスローする方法はありません。サーバーへの次のアクセスで、セッションがタイムアウトしたことがわかります。

于 2010-06-28T08:41:35.523 に答える
0

CallResponder を拡張し、fault メソッドをオーバーライドします。

ErrorMessage.MESSAGE_DELIVERY_IN_DOUBT などの既知のエラー コードについては、data.fault.faultCode を確認してください。

ヒットした場合は、ネイティブ関数の navigateToURL を使用してリダイレクトします。

于 2011-07-05T18:51:51.843 に答える
0

プロジェクトでこの問題が発生しました。特に、BlazeDS には実際のアプリケーションとは異なるセッション タイムアウトがあったためです (ClearTrust を介したシングル サインオン アーキテクチャを使用)。当然のことながら、これはJBoss環境にありました。私は、フォールト ハンドラー (共通のフォールト ハンドラーを持つ基本クラスを持っていた) で 2 つの特定の faultCodes を探すことによって、かなり単純なアプローチを取ることになりました: DuplicateSessionDetected と DeliveryInDoubt。BlazeDS が同じ JBoss セッション ID に対して新しいセッションを作成しようとするたびに、DuplicateSessionDetected が表示されました。DeliveryInDoubt も時々表示される傾向がありましたが、その理由はわかりません。これらの障害コードを見たとき、アプリを更新するために必要なアクションを実行しました (必要に応じて、ログイン ページなどにリダイレクトできます)。もちろん環境にもよりますが、

議論されたもう 1 つのアプローチは、Flex アプリで BlazeDS タイムアウト タイマーを表すタイマーを使用することでしたが、私はその目的のためにタイマーを配置するのは好きではありません。また、タイムアウトを確認するために少量のデータをサーバーに送信したり送信したりすることも聞いたことがありますが、これも理想的とは言えませんでした。

于 2010-02-17T19:12:02.633 に答える
0

ドキュメントを見て、接続が切断されたときにイベントが発生するかどうかを確認してください。あると想像します。そうでない場合は、接続の周りで try/catch を使用し、接続関連の問題をキャッチします。その場合は、アプリをリダイレクトしてユーザーに通知します。接続の問題でスローされた正確なエラー コードを見つけるには、おそらくそれをいじる必要がありますが、デバッグはかなり簡単なはずです。

于 2008-11-25T16:09:05.650 に答える