Конструктор SPSite возвращает кэшированный экземпляр.

Конструктор SPSite (new SPSite(mySiteId)) возвращает кэшированную запись, даже если сайт больше не существует. Как я могу предотвратить это?

3 ответа

У нас была такая же проблема, и мы еще не нашли решение для нее. Мы попытались проверить, существует ли SPSite, вызвав статический метод SPSite.Exists(..). Метод вернул true также для сайтов, которые больше не существуют.

Но мы нашли небольшой обходной путь. Мы пытаемся вызвать исключение FileNotFoundException, вызывая свойство Usage сайта SPSite. Когда возникает исключение, мы знаем, что сайт больше не существует.

После перехвата исключения вы можете снова вызвать метод SPSite.Exists(), который теперь вернет false.

Пока я не знаю деталей Sharepoint, но могу сказать, что звоню new НИКОГДА не вернет кэшированный объект. Это ВСЕГДА будет вновь выделенным объектом, хотя внутреннее устройство может указывать на кэшированные объекты.

Немного опоздал, может, но так как у меня была такая же проблема.

Вы можете вызвать сатирический метод InvalidateCacheEntry(Uri uri, Guid siteId) в классе SPSite. Передав пустой guid и URI используемого вами SPS-сайта, вы сможете очистить кеш и получить текущие значения.

Обратите внимание, что это также является причиной проблемы SPSite.Exists, возвращающих "true" для только что удаленных сайтов. Используя метод InvalidateCacheEntry, я смог определить правильное состояние сайта (удалено или существует). Я не знаю, какова стоимость производительности этого обходного пути, но, пожалуйста, учтите, если у вас возникнут подобные проблемы в будущем.

Другие вопросы по тегам