我目前运行Tridion 2011 SP1。
我正在编写一些每当页面发布时运行的代码。它循环遍历页面中的每个组件模板,获取组件并将各种字段写入XML文档。对于具有许多组件模板或具有许多字段的组件的页面,此过程可能需要一段时间才能运行。如果处理时间超过30秒,则会出现一个错误。
The operation performed by thread "EventSystem0" timed out.
Component: Tridion.ContentManager
Errorcode: 0
User: NT AUTHORITY\NETWORK SERVICE其次是另一个
Thread was being aborted.
Component: Tridion.ContentManager
Errorcode: 0
User: NT AUTHORITY\NETWORK SERVICE
StackTrace Information Details:
at System.RuntimeMethodHandle.InvokeMethod(Object target, Object[] arguments, Signature sig, Boolean constructor)
at System.Reflection.RuntimeMethodInfo.UnsafeInvokeInternal(Object obj, Object[] parameters, Object[] arguments)
at System.Delegate.DynamicInvokeImpl(Object[] args)
at Tridion.ContentManager.Extensibility.EventSubscription.DeliverEvent(IEnumerable`1 subjects, TcmEventArgs eventArgs, EventPhases phase)我相信我有三个选择。
1.增加超时
这似乎是一个懒散的解决方案,只是隐藏了问题。不能保证超时问题不会再次发生。我也不确定超时值存储在哪里(我尝试过在Tridion Manager.msc快照中更改几个值,但没有运气)。
2.在实际的事件处理程序中少做一些,并且有一个单独的进程来完成所有的艰苦工作()
这似乎也不是正确的解决方案。我真的很想把我所有的事件处理程序代码放在一个地方。我们为我们的Live5.3安装提供了这样的解决方案,这是一个需要维护的噩梦(它非常古老,而且编写得很糟糕)。
3.使我的代码更高效地
我的组件有很多字段,如果它们是ComponentLinks,那么我的代码必须深入每个字段。我想,因为Tridion对象的属性是延迟加载的,所以对我访问的每个属性都有一个API/数据库调用。检索一个在访问多个属性时会很快堆叠的属性平均需要0.2秒。如果有一种方法在一次调用中检索所有属性,这将是有用的。
有什么想法吗?
发布于 2012-09-13 08:12:47
SDL客户支持部门建议我增加超时时间。虽然这不是一个很好的解决方案,但它是唯一可用的解决方案。做这个
Tridion.ContentManager.config子目录中的config/,默认为C:\Program Files\Tridion\ or c:\Program Files (x86)\Tridion\<eventSystem>节点threadtimeout值(以秒为单位)增加到更高的值(我将其设置为120)Tridion.ContentManager.config并重新启动Tridion Content Manager Service Host服务进一步的文档可以获得48C53F76CBFD45A783A3975CA72ECC49。它确实需要用户名和密码才能访问。
发布于 2012-09-07 11:16:11
考虑过异步运行事件吗?您可以通过更改以下行来做到这一点:
EventSystem.Subscribe<IdentifiableObject,TcmEventArgs(....)至
EventSystem.SubscribeAsync<IdentifiableObject,TcmEventArgs(....)https://stackoverflow.com/questions/12316052
复制相似问题