Конструктор SPSite возвращает кэшированный экземпляр. - PullRequest
0 голосов
/ 23 августа 2010

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

Ответы [ 3 ]

1 голос
/ 23 августа 2010

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

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

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

0 голосов
/ 07 января 2013

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

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

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

0 голосов
/ 23 августа 2010

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

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