Проблема с производственным SqlSiteMapProvider – все элементы «исчезли»?

StackOverflow https://stackoverflow.com/questions/1941360

Вопрос

У нас есть несколько приложений 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 не является источником стабильности.Вот несколько статей, которые, возможно, смогут пролить некоторый свет:

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top