Я использую службу Windows, которая выполняет задания по очистке элементов Sitecore (неактивных или старых продуктов), и когда я пытаюсь их удалить, я не могу.
if (qItem != null)
{
qItem.Recycle();
}
Соответствующий StackTrace:
Message: Object reference not set to an instance of an object.
StackTrace: at Sitecore.Tasks.ItemEventHandler.OnItemDeleted(Object sender, EventArgs args)
at Sitecore.Events.Event.EventSubscribers.RaiseEvent(String eventName, Object[] parameters, EventResult result)
at Sitecore.Events.Event.EventSubscribers.RaiseEvent(String eventName, Object[] parameters)
at Sitecore.Events.Event.RaiseEvent(String eventName, Object[] parameters)
at Sitecore.Events.Event.RaiseItemDeleted(Object sender, ItemDeletedEventArgs args)
at Sitecore.Events.Event.DataEngine_ItemDeleted(Object sender, ExecutedEventArgs`1 e)
at System.EventHandler`1.Invoke(Object sender, TEventArgs e)
at Sitecore.Data.Engines.EngineCommand`2.RaiseExecuted()
at Sitecore.Data.Engines.DataEngine.RaiseDeletedItem(Item item, ID parentId, Boolean result)
at Sitecore.Data.Archiving.Archive.NotifyItemDeleted(Item item, ID parentId)
at Sitecore.Data.Archiving.SqlArchive.DoArchiveItems(IEnumerable`1 items, Guid archivalId)
at Sitecore.Data.Archiving.SqlArchive.DoArchiveItems(IEnumerable`1 items, Guid archivalId)
at Sitecore.Data.Archiving.SqlArchive.ArchiveItem(Item item)
at Sitecore.Data.Items.Item.Recycle()
Я еще раз упоминаю, что эта ошибка возникает только в том случае, если я перерабатываю элемент из службы Windows. Тот же рецикл работает нормально из веб-приложения.
В веб-приложении я вхожу в sitecore, а пользователь является администратором, поэтому у него есть некоторые права.
В службе Windows пользователь (Sitecore.Context.User) — "default\Anonymous"
.
Чтобы обойти проверки безопасности, я окружил вызов Recycle внутри SecurityDisabler, но безрезультатно.
Нужно ли мне входить в Sitecore из службы Windows? Если да, то как я могу это сделать?
Или есть другой способ переработать/удалить элемент Sitecore из не-веб-приложения?
Вот код, который запускается и генерирует исключение отказа в доступе (он не запускается внутри контекста SecurityDisabler):
Вот код, который перерабатывает элемент в контексте SecurityDisabler. Теперь нет исключения «Отказано в доступе», но есть исключение «Ссылка на объект не указывает на экземпляр».