我正在使用 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 服务回收项目时才会收到此错误。Web 应用程序中的相同回收工作正常。
在 Web 应用程序中,我登录到 sitecore,用户是管理员,所以他有一些权限。
在 Windows 服务中,用户 (Sitecore.Context.User) 是"default\Anonymous"
.
为了绕过安全检查,我在 SecurityDisabler 中使用了 Recycle 调用,但没有结果。
我是否需要从我的 Windows 服务登录到 Sitecore?如果是,我该怎么做?
还是有另一种方法可以从非 Web 应用程序中回收/删除 Sitecore 项目?
下面是运行并抛出拒绝访问异常的代码(它不在 SecurityDisabler 上下文中运行):
这是在 SecurityDisabler 上下文中回收项目的代码。现在没有拒绝访问异常,但是“对象引用未设置为实例”异常。