Wicked Codeにある SqlSiteMapProvider の例の VB.NET 実装を介して入力されるサイトマップを使用する ASP.NET アプリケーションがいくつかあります。これは DLL にコンパイルされ、インストールされ、サーバー上の GAC とローカルからも参照されます。数か月間、本番環境で問題なく動作しています。また、SQL Server 2008 を使用していることにも注意してください。
今日、私たちは本番環境で、どのアプリケーションの本番環境のサイトマップにもメニュー項目がまったく表示されていないことに気付きました。開発と QA は問題ないように見えました。SQLSiteMapProvider を実装するずっと前から、本番環境で SQL Server のメンテナンスを行っていません。また、最近 Web アプリを更新していません。
私が最初にしたことは、prod web.config を取得し、それを IDE の web.config に設定して、アプリを実行することでした。これも同じ問題です。私のマシンでもバグが複製されたため、IIS の問題は除外されるはずです。
これは少し緊急だったので、次に行ったことは、prod のサイトマップ テーブルにダミー レコードを挿入して、何が起こるかを確認することでした。魔法のように、メニュー項目が復元され、すべてが順調でした。ダミーのメニュー項目を削除したところ、問題なく同期されました。
これはちょっと怖かったですが、今後二度と起こらないように、なぜこれが起こったのかを理解しようとしています. 誰もこれを経験したことがありますか?SqlSiteMapProvider を使用したことがない場合 - SqlDependencyCache/ASP.NET キャッシュを使用してメニュー項目を格納するだけで、リンクを返すストアド プロシージャの結果セットが変更された場合、ASP.NET にこれが発生したことを通知し、サイトマップ/キャッシュ...
Web サーバーと SQL Server の間の接続が何らかの理由で切断された可能性がありますか? レコードを挿入すると、「ウェイクアップ」して再接続されましたか? たぶん、タイムアウト値または何らかの IsStillConnected() 関数がどこかにあり、接続がまだ無傷であることを確認するために PageLoad をチェックする必要がありますか? それとも、テーブルにレコードを挿入するまで、何らかの理由でストアド プロシージャが値を返さないと ASP.NET が判断したのでしょうか? 誰もこの問題を見たことがありますか?
ご指導いただきありがとうございます。
編集:これはすべて、ストアド プロシージャに SET NOCOUNT ON を設定したことによるものです。注意!これは MSDN のドキュメントのどこにもありません。