tl;dr: MvcSiteMapProvider のメニューは、ページの更新後にコードが実行されてメニューがレンダリングされる場合でも、アプリケーションがオンラインに戻った後にレンダリングに失敗することがあります。
ASP.NET MVC 3 プロジェクトで MvcSiteMapProvider を使用していますが、アプリをオフラインからオンラインに切り替えた後 (App_Offline.htm
サーバーのルートにファイルを挿入して削除することにより)、ページが更新されるまでメニューが何もレンダリングされないことがあります。
カスタムの DynamicNodeProvider を使用して、データベースからメニュー項目を照会し、メニューをレンダリングしています。デバッグ中に、ページがロードされる前にこのコードが実際に実行されていることがわかりますが、ページにメニューがレンダリングされていません。キャッシュを数時間に設定し、カスタム キャッシュ キーを使用して、特定のアクションの後に無効化できるようにしています。
残念ながら、このエラーを一貫して再現することはできません。ただし、DynamicNodeProvider の先頭にスリープを追加すると、より頻繁に再現できます。30 秒以上のスリープで約 60 ~ 70% の確率で失敗します。これまでのところ、キャッシュ期間を 0 に設定しても問題がないように見え、メニューが常にポップアップするため、キャッシュメカニズムに関係している可能性があります。ただし、問題の特定が難しいため、断言することは困難です。0 のままにしておくことは、パフォーマンスが低下するため、受け入れられる解決策ではありません。
この問題の根本的な原因は何ですか? 誰かが以前にこの動作を見たことがありますか、または回避策がありますか?