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