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