Sitecore GetItem возвращает ноль при получении элементов для разных сайтов - PullRequest
0 голосов
/ 22 октября 2018

Мы используем Sitecore 8 в нашем проекте, который имеет два разных сайта.

При попытке получить домашний элемент для одного из этих сайтов, кажется ненадежным:

var database = Factory.GetDatabase("Web");
var homeItem = database.GetItem(new ID("{FAF3904C-4BE4-ED80-891A-DFEE0A4C18C5}"));

Когда сайт только что был перезапущен в IIS или когда кэш Sitecore очищен, иногда переменная homeItem имеет значение null.

Кажется, что объект базы данных предоставляет элементы для одного сайта («текущий»)."сайт, соответствующий нашему URL-адресу запроса), но он не предоставляет элементы для другого сайта.

При последующих запросах для другого сайта кажется, что элементы для обоих сайтов доступны.И иногда, даже после перезапуска IIS или очистки кэша Sitecore все элементы легко доступны с самого начала.(Я не нашел несколько шагов, которые последовательно воспроизводят проблему.)

Я предполагаю, что где-то происходит кэширование (возможно, вне кэша Sitecore), но я понятия не имею, что именноэто может быть.

Кто-нибудь знает, почему database.GetItem может иногда возвращать ноль для элементов, которые существуют, но могут принадлежать другому сайту, чем текущий?И что еще более важно: как я могу получить элементы из базы данных с гарантией доступности элементов со всех сайтов?

1 Ответ

0 голосов
/ 25 октября 2018

Краткий ответ:

Оказывается, это было связано с безопасностью.У пользователя текущего запроса не было доступа к элементам другого сайта.

Дополнительная информация:

Причина, по которой я не нашел это сразу, когда использовалSecurityDisabler в раннем тесте заключается в том, что в нашем проекте используется пользовательский AuthorizationProvider, который явно не взаимодействует должным образом с SecurityDisabler.

Кроме того, до сих пор неясно, почему у нас был доступ ко всем элементам при последующих запросахдля второго сайта, но я думаю, что это может быть связано с кэшированием на некотором уровне.

...