OnSessionStart / Session_Start イベントは、サーバー ファーム環境でまだ 1 回 (合計) しか発生しないのでしょうか? それとも、要求が複数のサーバーによって処理されるため、サーバーごとに 1 回まで発生する可能性がありますか?
ASP.NET / IIS6 または 7
サーバーがスティッキー セッションを使用しているとは限りません。
OnSessionStart / Session_Start イベントは、サーバー ファーム環境でまだ 1 回 (合計) しか発生しないのでしょうか? それとも、要求が複数のサーバーによって処理されるため、サーバーごとに 1 回まで発生する可能性がありますか?
ASP.NET / IIS6 または 7
サーバーがスティッキー セッションを使用しているとは限りません。
IIS の既定のインストールでは、答えは「いいえ」です。通常、Session_Start は複数回起動します。クライアントは、ヒットした異なるサーバーごとに新しいセッションを作成します。IIS で Web ガーデン オプションを使用している場合も同様です。
セッションに依存せず、サーバー ファームがある場合は、通常、セッション状態を完全に無効にすることをお勧めします。方法は次のとおりです。 http://support.microsoft.com/kb/306996
セッションに依存している場合、最良のオプションはおそらく ASP.NET State Server Service です。ファーム内のすべてのサーバーは、Session 状態に単一のサーバーを使用し、Session_Start が 1 回だけ起動されるようにします。セットアップに関する多くの背景と詳細については、次を参照してください (具体的な手順については、「ステート サーバー モード」を参照してください): http://aspdotnetdevs.blogspot.com/2008/12/aspnet-session-state-and-modes.html
Thomas に加えて: セッション状態の設定によって異なります。
web.configで、<sessionState mode="" >
使用mode="InProc"
すると、複数の Session および SessionStart イベント (訪問したサーバーごとに 1 つ) を取得します。
他のモード (StateServer または SqlServer) では、1 つのセッションと 1 つの SessionStart を取得します。SessionEnd イベントはまったく発生しません。
ファームでは、Sql Server または State Server を使用して、ファーム内のすべてのサーバーのセッション状態を管理します。OnSessionStart がセッションごとに 1 回だけ呼び出され、常にすべての要求が同じサーバーに戻る必要がないことを保証するよりも、この単一のサーバーが状態を監視しています。
セッション状態を維持するために単一のサーバーを使用することの主な欠点は、OnSessionEnd イベントがなくなることです。
私の理解では、リクエストがファーム内のサーバーに到達すると、同じクライアントの今後のリクエストはすべてファーム内の同じサーバーにリダイレクトされる必要があります。