В настоящее время я работаю над TimerJob, который управляет некоторыми семействами сайтов. Когда работа выполняется, он просматривает список для извлечения URL-адреса семейства сайтов, затем он вызывает SPSite.Exists()
, чтобы проверить, существует ли сайт по-прежнему.SPSite.Exists() возвращает true, хотя семейства сайтов не существует
Чтобы проверить TimerJob, я удаляю семейство сайтов, но оставил соответствующую запись в списке. Затем я запускаю TimerJob и выполняю его код в режиме отладки. Когда дело доходит до точки, чтобы проверить, существует ли сайт SPSite.Exists()
, возвращает true.
Когда я запускаю TimerJob второй раз для того же семейства сайтов, метод SPSite.Exists()
возвращает false, как и следовало ожидать.
Так что теперь мне интересно, почему SPSite.Exists()
возвращает ложный результат, когда я запускаю задание в первый раз. Может ли это быть вызвано кешированием?
Когда я запускаю тот же код за пределами TimerJob, SPSite.Exists()
возвращает правильный результат каждый раз.
UPDATE
Так что я сделал немного больше отладки и кажется, что эта проблема вызвана каким-то механизм кэширования, поскольку это не происходит, когда Windows SharePoint Services Timer служба была возобновлена после того, как коллекция тестового сайта была удалена и до запуска TimerJob.
На данный момент я не могу представить себе другого решения, кроме попытки получить доступ к удаленному сайту и поймать исключение, которое будет выбрано, чтобы определить, действительно ли сайт существует.
UPDATE 2
После еще нескольких тестов, я понял, что проблема не возникает при первом вызове SPSite.Exists() (в пределах TimerJob) после того, как служба таймера перезагрузки. Второй вызов (для другого семейства сайтов) по-прежнему приводит к известной проблеме.
UPDATE 3
На данный момент я использую некрасивый хак, чтобы решить мою проблему. Когда SPSite.Exists() возвращает true, хотя на самом деле он не существует, я создаю объект SPSite и пытаюсь вызвать исключение FileNotFoundException, вызывая его свойство Usage. Когда возникают исключения, я знаю, что сайт не существует. Как ни странно, после исключения был сброшен SPSite.Exists() возвращает правильный результат (false).
Любые другие предложения?
Bye, Flo
По сравнению с моим решением (обновление 3) ваше решение позволяет избежать исключения. Мне это нравится. Так что это будет улучшение моего кода. – Flo