2009-04-24 6 views
0

私のプロダクションボックスの1つに非常に奇妙な問題があります。私たちは、IIS 6でホストされているアプリケーションを、その前にApache Webサーバーを持つ単一のマシンに持っています。私のアプリケーションは認証にASP.NET Membershipを使用しており、セッションの状態に依存しています。セッション変数にアクセスしようとすると、いくつかのサーバー要求がnull例外を被る問題が発生していますが、要求が再試行された場合、ページは例外を発生せず、正しく動作します。1つのリクエストに対してASP.NETセッションを失い、次にそれを取り戻します

これは、セッションIDのCookieが破損しているか、リクエストで失われていると考えられますが、何が原因か分かりません。なぜなら、ASP.NETがクッキーを見たり、新しいセッションを作成したりして、変数がnullである理由を説明していないからです。例外を取得すると、新しいSessionID Cookieをクライアントに書き戻すことができないため、クライアントは元のSessionIDを維持します。次に、次の要求が送信されると、元のSessionID Cookieが使用されます。これで、ASP.NETはセッション状態を検索して取得できます。これは純粋な推測ですが、その症状に合っているようです。

また、このサイトは、ASP.NETメンバーシップとASP.NETセッションで必要とされるもの以外のクッキーを使用していないため、IEのクッキー制限の下にあります。サイトは約8ヶ月間正常に機能しており、この問題は最近ポップアップしました。私はIISのリセットを試み、実際にマシンをリブートしましたが、何も問題を助けてくれないようです。

更新:

ここにはいくつかの説明があります。

1.)私たちのApacheサーバーは、インターネットに公開されている唯一のものです。すべての要求は、HTTPS経由でこのボックスに送信されます。 Apacheボックスは、HTTP経由ですべてのリクエストをアプリケーションサーバーに転送します。これはセキュリティ上の理由から行われています。私たちは、Apacheが問題であったかどうかを見てきましたが、Apacheログにエラーはないようです。

2.)実際のセッションオブジェクト自体で発生している例外とは対照的に、アプリケーションがセッションに格納されているオブジェクトにアクセスしようとしているときにnull例外が発生しています。

+0

「セキュリティ」の理由から、ApacheボックスからIISボックスに要求を転送していますか?私はあなたのネットワークの人たちが自分が何をしているのか知っているとは思わない。 – NotMe

+0

DMZゾーンは、基本的にアプリケーションの前にある別のレイヤーであり、ネットにさらされません。また、IIS7にアップグレードしない限り、.NETテクノロジスタックでは本当にできないURL書き換えが可能です – Broc

+0

設定を明確にすることはできますか?私はあなたがIIS 6の「ApacheのWebサーバーを使って」ということをあなたが何を意味するのか分かりません。実際にWebからのHTTP要求を処理するのは何ですか?また、実際のSessionオブジェクトのnull例外がありますか、Session内にあると予想されるオブジェクトは存在しません。それらの事の一つ...まあ、決して起こるべきではありません!セッションIDのCookieが失われても、ASP.NETは新しい有効なSessionオブジェクトを作成する必要があります。 – Bryan

答えて

0

問題の根本が見つかりました。私たちのアプリケーションサーバー上でIISのメタベースが壊れているようです。この問題を解決する最善の方法は、IISのクリーンインストールを行うことですが、ビジネスの制約から、これはオプションではありません。もう1つの解決策は、実際にアプリケーションを実行するための新しいアプリケーションプールを作成することです。私よりもIISの専門知識が豊富な人によると、これは短期間で問題を解決しますが、同じことがこのアプリケーションプールで発生する可能性が非常に高いです。このため、新しいApp Poolを作成する必要があります。

関連する問題