我正在使用Windows服务执行Sitecore项目(不活动或旧产品)上的清理作业,以及当我试图删除它们时,我不能。无法从Windows服务回收站点核心CMS项目
if (qItem != null)
{
qItem.Recycle();
}
Relevat堆栈跟踪是:
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,用户是admin,所以他有一些权利。
在Windows服务中,用户(Sitecore.Context.User)是"default\Anonymous"
。
为了绕过安全检查,我在SecurityDisabler内使用但没有结果包围回收呼叫。
我是否需要从Windows服务登录到Sitecore?如果是的话,我该怎么做?
或者还有另一种方式来从非web应用程序回收/删除Sitecore项目?
这里是运行并抛出一个拒绝访问异常(它没有一个SecurityDisabler上下文中运行)的代码:
这里是一个循环利用方面SecurityDisabler内部项目的代码。现在不存在拒绝异常,但是“对象引用未设置为实例”异常。在此抛出异常的方法(Sitecore.Tasks.ItemEventHandler.OnItemDeleted
)的反射
您可以尝试Web服务。您可以在/ sitecore/shell/WebService下找到它 – Lloyd