1

2 つの .NET Web サイトを 1 つの Windows 2003 (IIS6) サーバーから別のサーバーに移行しています。サイトの 1 つは .NET 2.0 で、もう 1 つは .NET 3.5 です。グローバル web.config ファイル (C:\Windows\Microsoft.NET\Framework\v2.0.50727\CONFIG\ ディレクトリ内) で次の設定を使用して、ASP.NET セッション状態の StateServer モードを使用しています。セッション状態は古いサーバーで正常に動作しています。

<sessionState mode="StateServer" stateConnectionString="tcpip=127.0.0.1:42424"/>

ただし、ここから .NET 2.0 と .NET 3.5 SP1 フレームワークをインストールした後、サーバーの再起動、セッション タイムアウト、またはアプリケーション プールの更新後に、初めて (毎回) 次のエラー メッセージが表示されます。

このバージョンの ASP.NET にはセッション状態サーバー バージョン 2.0 以降が必要なため、セッション状態サーバーを使用できません。 lockCookie、Byte[] buf、Int32 cb、Int32 networkTimeout、SessionNDMakeRequestResults& 結果) System.Web.SessionState.OutOfProcSessionStateStore.SetAndReleaseItemExclusive (HttpContext コンテキスト、文字列 ID、SessionStateStoreData アイテム、オブジェクト lockId、ブール型 newItem) で System.Web.SessionState.SessionStateModule System.Web.HttpApplication.SyncEventExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() の System.Web.HttpApplication の .OnReleaseState(オブジェクト ソース、EventArgs eventArgs)。ExecuteStep(IExecutionStep ステップ、ブール値 & completedSynchronously) ]

同様の症状を持つ他の2つの投稿を見つけましたが、どちらも機能する解決策を提供しませんでした.

  1. セッション状態サーバーを使用できません....セッション状態サーバーのバージョン 2.0 以降が必要です。
  2. セッション状態サーバーを使用できません

これまでのところ、私は試しました:

  1. aspnet_regiis -ua の後に aspnet_regiis -i -enable を使用する
  2. .NET 3.5 SP1 および .NET 2.0 のアンインストールと再インストール
  3. httpRuntime enableVersionHeader 属性を明示的に true に設定する

注:この MSDN 記事で説明されているように、各アプリケーションの web.config ファイルに MachineKey 属性も設定しました。これは、以前とまったく同じようにコピーされた古いサーバーで作業していたものです。

.NET 2.0 のみをインストールすると、問題が完全に解消されたことに気付きました。.NET 3.5 SP1 をインストールした後にのみ表示されました。残念ながら、アプリケーションの 1 つは、その機能の一部が .NET 3.5 に依存しているため、アンインストールしたままにしておくことはできません。

この問題を診断して修正する方法はありますか?

4

1 に答える 1

0

さて、この問題について Microsoft に連絡したサポート インシデントの 1 つを焼き尽くしました。約 12 時間のトラブルシューティングの後、問題は解決されませんでした。

これは Windows の問題なのだろうかと思い始めたとき、まったく同じ問題を抱えている別の投稿を見つけました。

ASP.NET State Service のバージョンの問題。州のサービスは 1.1、ウェブサイトは 3.5

したがって、これはおそらく Virtuozzo の最新バージョンのバグのようです。

サーバーの起動時に次の 3 つのコマンドを実行する Windows サービスを作成しました。.bat ファイルを使用し、Windows のスケジュールされたタスクを使用してコマンドを実行しようとしましたが、うまく動作しませんでした。この単純な Windows サービスを作成してデバッグするのに約 5 時間かかりました。これは、スケジュールされたタスクでサービスを実行するための適切な Windows アクセス許可を見つけて割り当てるよりもおそらく短い時間でした。

C:\Windows\System32\SC.EXE CONFIG aspnet_state binPath= "C:\Windows\Microsoft.NET\Framework\v2.0.50727\aspnet_state.exe"

C:\Windows\System32\NET.EXE stop aspnet_state

C:\Windows\System32\NET.EXE start aspnet_state

おそらく aspnet_state を Windows サービスに依存させることができたので、aspnet_state を再起動する必要はありませんでしたが、再起動時に依存関係の設定も破棄されるかどうかはわかりませんでした。他の手動構成は行わないでください。

RunAsServiceも試したので、自分で何かを構築する必要はありません。ただし、そのサービスの作成者は、Windows サービスが定義上マルチスレッドであることを理解していませんでした。サーバーを再起動しましたが、構成されたコマンドを実行するための十分なアクセス許可がサービスになかったため、Windows が起動しませんでした。幸いなことに、バックアップをとっていなければ、VPS を最初から再構築する必要がありました。RunAsService は、すべての作業をメイン スレッドで実行しようとするため、停止コマンドにも応答しません。

于 2011-05-06T11:12:35.607 に答える