0

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 のドキュメントのどこにもありません。

4

2 に答える 2

1

SqlDependencyは、正確に安定性の原動力ではありません。おそらくいくつかの光を当てることができるいくつかの記事があります:

于 2009-12-21T18:18:53.533 に答える
0

私の編集を確認してください;)

これはすべて、ストアド プロシージャに SET NOCOUNT ON を設定したことによるものです。注意!これは MSDN のドキュメントのどこにもありません。

于 2010-10-19T20:26:20.930 に答える