4

マイクロソフトのドキュメントはこちら

http://msdn.microsoft.com/en-us/library/h6bb9cz9(v=vs.90).aspx

また、いくつかの SO 記事では、ASP.NET web.config ファイルの sessionState 宣言でallowCustomSqlDatabase="true"を指定すると、デフォルトの ASPState データベースを使用してオーバーライドし、独自のデータベース名を指定できることが示されています。

これらのプロパティを web.config ファイルで設定します。

<sessionState allowCustomSqlDatabase="true" mode="SQLServer" sqlConnectionString="Data Source=mysqlservername;Initial Catalog=DR_ASPState;Integrated Security=true;Connect Timeout=15;" />

デフォルトの Web サイト ページを表示しようとすると、ASPState データベースにアクセスできないことを示すエラー メッセージが表示されます。

SQL プロファイラーを使用して SQL トラフィックを監視したところ、失敗の原因は次の要求であることがわかりました。

SELECT @appId = AppId
FROM [ASPState].dbo.ASPStateTempApplications
WHERE AppName = @appName

アプリケーション プールをリサイクルし、キャッシュされたデータベース名の参照が存在する可能性があるものをフラッシュするために IIS を再起動しましたが、役に立ちません。私の理解では、ASP.NET SessionState は、指定したデータベース名DR_ASPStateを使用して、SessionState データベースへの接続に使用する SQL ステートメントを生成します。しかし、[ASPState]がフレームワークにハードコードされているようです。

誰かが私が間違ったことを見つけたり、これを解決する方法に関する有用なトラブルシューティング情報を提供したりできますか?

4

1 に答える 1

7

私は問題を明らかにしました。IT チームは、既存のASPStateデータベースのバックアップを復元して、カスタム ASP セッション状態データベースDR_ASPStateを作成しました。ただし、別の名前を付けただけでは、ハードコードされたデータベース参照で生成されたストアド プロシージャは変更されません。

Web サイト、接続文字列で定義されている正しい代替データベースDR_ASPStateを呼び出しています。ただし、.NET コマンドによって生成されたストアド プロシージャの少なくとも 1 つは、ストアド プロシージャ ステートメントにデータベース名がハードコーディングされています。

SQL プロファイラーを使用して、名前が変更されたデータベースを使用して問題を引き起こしているステートメントであることを特定しました

declare @p2 int
set @p2=NULL
exec dbo.TempGetAppID @appName='/LM/W3SVC/10/ROOT',@appId=@p2 output
select @p2

ストアド プロシージャ dbo.TempGetAppID を調べると、次のようなステートメントが表示されます。

SELECT @appId = AppId
FROM [ASPState].dbo.ASPStateTempApplications
WHERE AppName = @appName

これは、DR_ASPStateを .NET ドキュメントの指示に従って新しいデータベースとして適切にインストールすることで適切に解決されます。

http://msdn.microsoft.com/en-us/library/ms229862(v=vs.80).aspx

このステートメントは、Web サーバーから実行する必要があります。

aspnet_regsql.exe -S *servername* -E -ssadd -sstype c –d DR_ASPState
于 2013-11-18T16:00:10.280 に答える