Проблема с производственным SqlSiteMapProvider – все элементы «исчезли»?
-
20-09-2019 - |
Вопрос
У нас есть несколько приложений ASP.NET, которые используют карту сайта, заполняемую с помощью реализации VB.NET примера SqlSiteMapProvider, найденного по адресу Злой Кодекс.Он компилируется в DLL, затем устанавливается и на него можно ссылаться из GAC на серверах, а также с наших локальных пользователей.Уже несколько месяцев он работает в производстве нормально.Я также должен отметить, что мы используем SQL Server 2008.
Сегодня мы пришли и заметили в производстве, что ни для одного из приложений на карте сайта в продукте вообще не отображаются пункты меню.Разработчики и контроль качества выглядели нормально.Мы не проводили никакого обслуживания SQL Server в рабочей версии довольно давно, задолго до того, как мы даже реализовали SQLSiteMapProvider.Мы также в последнее время не обновляли ни одно веб-приложение.
Первое, что я сделал, это взял prod web.config, установил его в свой web.config в своей IDE и запустил приложение - проблема осталась та же.Это должно исключить проблему с IIS, поскольку ошибка была воспроизведена и на моей машине.
Поскольку это было немного срочно, следующее, что я сделал, это просто вставил фиктивную запись в таблицу карты сайта в продукте, чтобы посмотреть, что произойдет.Ура, как по волшебству, пункты меню восстановились и всё стало хорошо.Я удалил фиктивный пункт меню, и он синхронизировался без проблем.
Хотя это было немного страшно, и я пытаюсь понять, почему это произошло, чтобы подобное не повторилось в будущем.Кто-нибудь сталкивался с этим раньше?Если вы никогда не использовали SqlSiteMapProvider — он просто использует кеш SqlDependencyCache/ASP.NET для хранения пунктов меню, а затем, если набор результатов хранимой процедуры, возвращающей ссылки, изменяется, он сообщает ASP.NET об этом и повторно заполняет карта сайта/кеш...
Может быть, соединение между веб-сервером и SQL-сервером каким-то образом умерло?А вставка записи заставила его "проснуться" и снова подключиться?Может быть, где-то есть значение тайм-аута или какая-то функция IsStillConnected(), мне нужно проверить PageLoad, чтобы убедиться, что соединение все еще в рабочем состоянии?Или, может быть, ASP.NET думал, что хранимая процедура по какой-то причине не возвращает никаких значений, пока мы не вставили запись в таблицу?Кто-нибудь видел эту проблему раньше?
Заранее большое спасибо за любые рекомендации.
РЕДАКТИРОВАТЬ:все это произошло из-за наличия SET NOCOUNT ON в моей сохраненной процедуре.ОСТЕРЕГАТЬСЯ!Этого нигде нет в документации MSDN, и на какое-то время меня это действительно задело!
Решение 2
Проверьте мое редактирование ;)
все это произошло из-за наличия SET NOCOUNT ON в моей сохраненной процедуре.ОСТЕРЕГАТЬСЯ!Этого нигде нет в документации MSDN, и на какое-то время меня это действительно задело!
Другие советы
SqlDependency не является источником стабильности.Вот несколько статей, которые, возможно, смогут пролить некоторый свет: