Windows services 无法从Windows服务中回收Sitecore CMS项目
我使用的Windows服务在Sitecore项目或旧产品上执行清理作业,当我尝试删除它们时,我无法执行Windows services 无法从Windows服务中回收Sitecore CMS项目,windows-services,sitecore,recycle,Windows Services,Sitecore,Recycle,我使用的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
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应用程序中,我登录到sitecore,用户是管理员,所以他有一些权限
在Windows服务中,用户Sitecore.Context.user为默认\匿名
为了绕过安全检查,我在SecurityDisabler中使用循环调用,但没有结果
我需要从Windows服务登录Sitecore吗?如果是,我怎么做
或者是否有其他方法可以从非web应用程序中回收/删除Sitecore项目
下面是运行并引发拒绝访问异常的代码,该异常不是在SecurityDisabler上下文中运行的:
下面是在SecurityDisabler上下文中回收项的代码。现在没有拒绝访问异常,但对象引用未设置为实例异常
在Reflector中查看引发异常的Sitecore.Tasks.ItemEventHandler.OnItemDeleted方法,您的空引用可能是TaskDatabase
protected void OnItemDeleted(object sender, EventArgs args)
{
Item item = Event.ExtractParameter(args, 0) as Item;
Error.AssertNotNull(item, "No item in parameters");
using (new SecurityDisabler())
{
Globals.TaskDatabase.RemoveItemTasks(item);
}
}
我假设对于您的windows服务,您的App.config具有精简的Sitecore配置。您应该确保/sitecore/configuration/TaskDatabase元素位于sitecore配置中。在Reflector中查看引发异常的方法sitecore.Tasks.ItemEventHandler.OnItemDeleted,您的空引用可能是TaskDatabase
protected void OnItemDeleted(object sender, EventArgs args)
{
Item item = Event.ExtractParameter(args, 0) as Item;
Error.AssertNotNull(item, "No item in parameters");
using (new SecurityDisabler())
{
Globals.TaskDatabase.RemoveItemTasks(item);
}
}
我假设对于您的windows服务,您的App.config具有精简的Sitecore配置。您应该确保/sitecore/configuration/TaskDatabase元素位于您的sitecore配置中。当我们安装一个sitecore实例时,我们会获得一个web服务,该服务在与sitecore应用程序相同的域下公开 此服务具有使用Sitecore API所需的所有方法
这对我来说很有效当我们安装Sitecore实例时,我们会得到一个web服务,它与Sitecore应用程序在同一个域下公开 此服务具有使用Sitecore API所需的所有方法
它对我有效我在使用Sitecore API的独立服务方面遇到了非常类似的问题 我使用BucketManager同步一个item bucket,结果调用了相同的item.Delete方法来循环调用,所以我的堆栈跟踪将我带到了相同的位置 TaskDatabase是在我使用的web.config中定义的,但是我决定Globals上的Load方法永远不会被调用,所以我从来不会用config中的任何东西初始化TaskDatabase字段 在调用delete from的对象的构造函数中,我包括以下行:
Sitecore.Globals.Load();
这解决了我的问题。我在使用Sitecore API的独立服务方面遇到了非常类似的问题 我使用BucketManager同步一个item bucket,结果调用了相同的item.Delete方法来循环调用,所以我的堆栈跟踪将我带到了相同的位置 TaskDatabase是在我使用的web.config中定义的,但是我决定Globals上的Load方法永远不会被调用,所以我从来不会用config中的任何东西初始化TaskDatabase字段 在调用delete from的对象的构造函数中,我包括以下行:
Sitecore.Globals.Load();
这解决了我的问题。您可以尝试web服务。您可以在/sitecore/shell/webservices下找到它。您可以尝试web服务。您可以在/sitecore/shell/webservice下找到它。配置文件中有一个TaskDatabase:我还使用Reflector查找了已执行的代码,但无法确定哪个变量为null。配置文件中有一个TaskDatabase:我还使用Reflector查找了已执行的代码,但无法确定是什么变量为空。