首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Tridion事件系统超时

Tridion事件系统超时
EN

Stack Overflow用户
提问于 2012-09-07 10:11:31
回答 5查看 823关注 0票数 4

我目前运行Tridion 2011 SP1。

我正在编写一些每当页面发布时运行的代码。它循环遍历页面中的每个组件模板,获取组件并将各种字段写入XML文档。对于具有许多组件模板或具有许多字段的组件的页面,此过程可能需要一段时间才能运行。如果处理时间超过30秒,则会出现一个错误。

代码语言:javascript
复制
The operation performed by thread "EventSystem0" timed out.

Component: Tridion.ContentManager
Errorcode: 0
User: NT AUTHORITY\NETWORK SERVICE

其次是另一个

代码语言:javascript
复制
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秒。如果有一种方法在一次调用中检索所有属性,这将是有用的。

有什么想法吗?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2012-09-13 08:12:47

SDL客户支持部门建议我增加超时时间。虽然这不是一个很好的解决方案,但它是唯一可用的解决方案。做这个

  1. 在安装内容管理器的服务器上,打开应该位于content位置的Tridion.ContentManager.config子目录中的config/,默认为C:\Program Files\Tridion\ or c:\Program Files (x86)\Tridion\
  2. 查找<eventSystem>节点
  3. threadtimeout值(以秒为单位)增加到更高的值(我将其设置为120)
  4. 保存Tridion.ContentManager.config并重新启动Tridion Content Manager Service Host服务

进一步的文档可以获得48C53F76CBFD45A783A3975CA72ECC49。它确实需要用户名和密码才能访问。

票数 2
EN

Stack Overflow用户

发布于 2012-09-07 11:16:11

考虑过异步运行事件吗?您可以通过更改以下行来做到这一点:

代码语言:javascript
复制
EventSystem.Subscribe<IdentifiableObject,TcmEventArgs(....)

代码语言:javascript
复制
EventSystem.SubscribeAsync<IdentifiableObject,TcmEventArgs(....)
票数 6
EN

Stack Overflow用户

发布于 2012-09-07 12:30:55

您可能考虑做的一件事是使用组件的.ToXml()方法并从XML中获取值,而不是使用Tridion。这通常要快得多,您可以使用XSLT或Linq“遍历”您的字段。

如果您只对字段感兴趣,那么只需使用.Content (和.Metadata)属性,再次使用Linq或XSLT或任何您想解析RegEx的技术(可能RegEx除外)。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12316052

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档