1

簡単な詳細:

IIS6 で ASP.NET 4.0.30319.0 を実行しています。ReportViewer を含む Web サイトをかなり長い間 (~3 年) ホスティングしてきました。4 月に 4.0 ランタイムにアップグレードしたところ、2 か月間スムーズに動作しました。

現在、ReportViewer をホストしているページでかなりのセッション タイムアウト例外が突然発生するようになりました。イベント ビューアーには、これらのイベントの多くが記録されており、実際にページを表示できるようになるかどうかは、どちらかといえば当たり外れがあります。ページに一度アクセスすると、生成されたレポートが表示されます。リフレッシュすると、エラーが発生します。もう一度リフレッシュすると戻ります...

私はこの問題を解決しようとして多くのフォーラムを精査しました。ほとんどのフォーラムは、SQL サーバーの設定 (私は使用していません) の変更、AsyncRendering="False" の変更、アプリケーション プールの設定の変更、またはタイムアウトを推奨しているようです。この問題なしで 1 週間前に機能しただけなので、これらのいずれも変更することに消極的です。

Windows Update、または誰かが私の知らないうちにサーバーに変更を加えることを除いて、私はアイデアがありません...

アップデート

アプリ プールで最大仮想メモリを増やしてみましたが、うまくいきませんでした。

4

1 に答える 1

1

.NET 4.0 と Report Viewer 2010 にアップグレードした後、ほぼ同じ問題が発生しました。両方のアップグレードを同時に行ったので、誰のせいかわかりません。私の場合、更新は機能しますが、ユーザーは夜間にページを開いたままにし、セッションがすでに失われている翌朝に更新をクリックします。アプリ プールは毎晩リサイクルされます。

レポート ビューアーはセッションを維持する必要があると思いますが、そうではありません。レポート閲覧者からの要求は一切ありません。その後、セッションの有効期限またはアプリのリサイクルによってセッションが終了すると、保存された状態が失われます。私もInProcを使っていて、変えてみたのですが、State ServerでReport Viewerが動作しませんでした。後でもう一度試して、InProc から離れます。

私の同様の質問を参照してください。

まだ本番環境には入れていませんが、レポートを含む aspx ページに派生元のカスタム ページを与えました。セッションが実際にタイムアウトしたかどうかを確認します。セッションが必要な場所でポストバックを行うのではなく、基本的にレポートページをリロードします。

if (Context.Session != null)
        {
            //Tested and the IsNewSession is more advanced then simply checking if 
            // a cookie is present, it does take into account a session timeout, because 
            // I tested a timeout and it did show as a new session
            if (Session.IsNewSession)
            {
                // If it says it is a new session, but an existing cookie exists, then it must 
                // have timed out (can't use the cookie collection because even on first 
                // request it already contains the cookie (request and response
                // seem to share the collection)
                string cookieHeader = Request.Headers["Cookie"];
                if ((null != cookieHeader) && (cookieHeader.IndexOf("ASP.NET_SessionId") >= 0))
                {
                    Response.Redirect(Request.Url.ToString());
                }
            }
        }
于 2010-08-02T08:24:19.947 に答える