Производственный вопрос SqlSiteMapProvider - все элементы «исчезли»? - PullRequest
0 голосов
/ 21 декабря 2009

У нас есть несколько приложений 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, и я действительно ненадолго облажался!

Ответы [ 2 ]

1 голос
/ 21 декабря 2009

SqlDependency не совсем локомотив стабильности. Вот некоторые статьи, которые, возможно, могут пролить свет:

0 голосов
/ 20 октября 2010

Проверьте мои правки;)

все это произошло от включения SET NOCOUNT ON в моем хранимом процессе. BEWARE! Этого нет нигде в документах MSDN, и я действительно ненадолго облажался!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...