【发布时间】:2012-09-24 10:35:55
【问题描述】:
我正在使用 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 上下文中回收项目的代码。现在没有拒绝访问异常,但是“对象引用未设置为实例”异常。
【问题讨论】:
-
你可以试试网络服务。您可以在 /sitecore/shell/WebService 下找到它
标签: windows-services sitecore recycle