0

ユーザーのセッションをホストしている 3 ノード クラスターの 1 つのノードを停止すると、Web アプリで次の例外が発生します。

セッション キャッシュには、エビクションなしのセカンダリもあります。

エラーメッセージとスタックは次のとおりです。

Exception information: 
    Exception type: DataCacheException 
    Exception message: ErrorCode<ERRCA0022>:Cache::GetAndLock: There is a temporary failure, please retry after some time. 

Stack trace:    at Microsoft.Data.Caching.DataCache.ExecuteAPI(RequestBody reqMsg, String apiName)
   at Microsoft.Data.Caching.DataCache.InternalGetAndLock(String key, TimeSpan timeout, DataCacheLockHandle& lockHandle, String region)
   at Microsoft.Data.Caching.DataCache.GetAndLock(String key, TimeSpan timeout, DataCacheLockHandle& lockHandle)
   at Microsoft.Data.Caching.DataCacheSessionStoreProvider.GetItemExclusive(HttpContext context, String id, Boolean& locked, TimeSpan& lockAge, Object& lockId, SessionStateActions& actions)
   at System.Web.SessionState.SessionStateModule.GetSessionStateItem()
   at System.Web.SessionState.SessionStateModule.PollLockedSessionCallback(Object state)

しばらくしてからリクエストを再試行すると、メッセージは消えます。なぜ私はこのメッセージを最初に受け取ったのでしょうか。サーバーは、ホストがダウンしていることを独自に判断して、他のクライアントのいずれかに切り替えるべきではありません。ルーティングの問題が発生した場合に備えて、web.config ファイルでセッション クライアントをシンプルに定義しましたが、それでも問題が発生します。

4

1 に答える 1

0

次のブログを参照してください。

http://blogs.msdn.com/velocity/archive/2009/04/30/the-dreaded-error-cache-get-the-request-timed-out.aspx

http://blogs.msdn.com/velocity/archive/2009/06/17/troubleshooting-velocity-series.aspx

サーバーがこれを独自に理解していることについての質問に答えるには; 実際にはそれを行うことができますが、アプリケーション開発者の観点から (再試行またはフェイルファースト) を選択することはできないため、アプリケーション自体に適切な動作 (再試行、DB へのフェールバックなど) を採用することはアプリケーションに任せています。したがって、デフォルトで再試行しますが、一部のアプリケーションが必要とする場合は、再試行ロジックを組み込むことにも目を向けています。これがあなたの質問に答えることを願っています。

于 2009-12-28T12:59:31.393 に答える