IIS 7およびASP.net3.5に適用されるため、ASP.NETセッションの状態について理解する必要があります。
アプリケーションがインプロセスセッション状態を使用するように構成されている場合、複数のワーカープロセスがある場合でも問題なく機能しますか?言い換えると、ワーカープロセスはセッション状態を共有しますか?
IIS 7のデフォルト構成は、インプロセスセッション状態を使用し、最大10個のワーカープロセスを割り当てることです。その場合、このデフォルト構成が機能する可能性があります。いくつかの問題を抱えているASP.NETMVC Webアプリを作成した会社では、サーバー環境のせいになっています。主張は、10個のワーカープロセスのデフォルト設定を使用しているため、セッション状態が壊れているということです。これが実際に正確な主張であるかどうかを知る必要があります。ASP.NETアプリがデフォルト構成で機能しないことを知らなかったので、少し混乱しており、これを明確にする必要があります。
複数のワーカープロセスがあり、InProcを使用することは互換性がないようです。
this を参照してください:
アプリケーションのWeb.configファイルのprocessModel要素でwebGarden属性をtrueに設定してWebガーデンモードを有効にする場合は、InProcセッション状態モードを使用しないでください。その場合、同じセッションに対する異なる要求が異なるワーカープロセスによって処理されると、データが失われる可能性があります。
複数のワーカープロセスは「ウェブガーデン」です。処理中のセッション状態は正しく機能しません。 Webアプリには単一のワーカープロセスを使用するか、セッション状態サーバーまたはセッション状態にはSQLServerを使用する必要があります。
私は間違っているかもしれませんが、私が知る限り、デフォルトでは、アプリケーションドメインごとに1つのワーカープロセスしかなく、リクエストを処理するための複数のワーカースレッドがあります。この場合、In-Proc Session Stateは問題なく機能するはずです(デフォルト設定)。
ただし、複数のワーカープロセス(ワーカースレッドだけでなく、実際のワーカープロセス)がある場合は、プロセス外のセッション状態が必要です。
ASP.NETに複数のワーカープロセスがあることは、Webガーデンモードと呼ばれ、特に有効にする必要があると思います。有効にする場合は、プロセス外の状態管理。 インプロセスモードの見出しの下にある このページのコメントボックス を参照してください。
セッションロストの問題を経験し、最終的に根本原因を見つけるのに苦労しました。
最近、セッションが失われたことについて、いくつかのバグの繰り返しを受け取りました。ウェブサイトの負荷が低い場合は、すべて問題ありません。 Webサイトの負荷が高い場合、セッションが失われる問題が発生します。これは非常に奇妙です。
根本的な原因は、ワーカープロセスの設定とセッションの状態の間にあります。ここでは、5つのワーカープロセスがあります。つまり、Webサイトの負荷が高いときに、5つの独立したプロセスが実行されます。セッションがプロセスに保存されている間、IISは、クライアントユーザーが同じワーカープロセスを使用することを保証できません。たとえば、ユーザークライアントは、最初にWebにアクセスしたとき、および2番目にアクセスしたときにプロセスAを使用します。 Webにアクセスすると、プロセスBが使用されている可能性があります。プロセスBにセッションが保存されていないため、彼のセッションは失われます。
ウェブサイトの負荷が低いときになぜ問題ないのですか? IISは、負荷が低いときに1つのワーカープロセスのみをセットアップするため、セッションが失われる問題は発生しません。これが、新しいバージョンを展開して夜間にテストしても問題がない理由を説明しています。 、しかし、エラーは明日の朝に再び発生します。夜はWebサイトの負荷が低いためです。
プロセスでセッション状態を使用するように注意してください。Webサイトの負荷が高くなると不安定になり、複数のワーカープロセスを検討します。 StateServersession状態のようなものを試してください。