SQL Serverを使用したAsp.netセッション状態サーバー
-
06-07-2019 - |
質問
次のweb.config行を使用してセッション状態を機能させようとしています:
<sessionState
mode="SQLServer"
stateConnectionString="tcpip=127.0.0.1:42424"
sqlConnectionString="Data Source=dbServer;User ID=stateUser;Password='thepassword'"
cookieless="false"
timeout="20"/>
dbServerで、次のコマンドを実行してASPState dbをセットアップしました。
aspnet_regsql.exe -S localhost-E -ssadd -sstype p
webServerでASP.Net状態サービスを開始しましたが、ASPStateTempApplicationsまたはASPStateTempSessionsテーブルにレコードが表示されず、セッションがまだプロセスに保存されているように見えます。
何が問題なのですか?状態サービスをDBサーバーで実行する必要がありますか? .net 3.5.1がインストールされているにもかかわらず、そのマシンでは利用できないため、IISと共にインストールされます。
IISログに失敗のヒントは表示されません。何が問題なのですか?
解決
最初に、SQL Serverセッション状態を使用するためにState Serviceを開始する必要はありません。 ASP.NET State Serviceを忘れてください。
サイトがセッション変数を作成していることを確認しますか?これらの変更をweb.configに入れたからといって、セッション変数を一度も使用しないと、それは使用されません。
他のヒント
パスワードの周りに本当に引用符がある場合は、それらを削除してみてください:
sqlConnectionString="Data Source=dbServer;User ID=stateUser;Password=thepassword"
次の行を削除します。SQLセッションストレージの機能はありません。
stateConnectionString="tcpip=127.0.0.1:42424"
また、状態サービスを停止することもできます。 SQL Serverセッション状態ではなく、アウトプロセスセッション状態に必要です。
また、SQL Serverセッション状態では、 aspnet_regsql.exe
ではなく、データベースで InstallSqlState.sql
を実行する必要があります。新しい ASPState
データベースを作成する必要があります。
小さなHttpModuleを書くのはどうですか?ユーザーを新しいコードベースに移行する必要がある期間、それを所定の場所にドロップできます。このモジュールは、各ページリクエストでいくつかの作業を行い、ユーザーのセッションを確認し、セッションを破棄する必要があるかどうかを判断できます。おそらく、セッションが最初に作成されたときにユーザーのセッションにアプリケーションバージョン文字列を保存し、現在のアプリバージョン文字列をそれと比較します。