8

使用 SDL Tridion 2011 SP1 时,我们有时会在对多个项目执行任务时收到 GUI 错误(例如,一次从一个文件夹发布 1000 个组件)。从同一个列表中发布大约 100 个项目非常有效。

我们在 CME/GUI 中看到的错误如下:

The transaction associated with the current connection has completed
but has not been disposed. The transaction must be disposed before the
connection can be used to execute SQL statements.

Tridion 错误日志中的 Windows 事件查看器中还有一个附加错误,如下所示:

The socket connection was aborted. This could be caused by an error processing 
    your message or a receive timeout being exceeded by the remote host, or an
    underlying network resource issue. Local socket timeout was
    '10675199.02:48:05.4775807'.
The read operation failed, see inner exception.
The socket connection was aborted. This could be caused by an error processing
    your message or a receive timeout being exceeded by the remote host, or an
    underlying network resource issue. Local socket timeout was
    '10675199.02:48:05.4775807'.
An existing connection was forcibly closed by the remote host

这里使用了哪些超时值,我们如何增加这些超时值?

4

4 回答 4

12

在 %windir%\Microsoft.NET\Framework64\v4.0.30319\Config\machine.config 和 %windir%\Microsoft.NET\Framework\v4.0.30319\Config\machine.config

  • 将 allowExeDefinition 从“MachineOnly”更改为“MachineToApplication”</li>
  • 在</configuration>之前添加下面的部分

在 Tridion\config\Tridion.ContentManager.config - 以秒为单位提供 transactionTimeout 的值 < session transactionTimeout="3600" />

在 Tridion\bin\TcmServiceHost.exe.config - 更改 CoreService_netTcpBinding 绑定

<binding name="CoreService_netTcpBinding" 
transactionFlow="true" 
transactionProtocol="WSAtomicTransaction11" 
maxReceivedMessageSize="2147483647" 
closeTimeout="00:30:00" 
openTimeout="00:30:00" 
receiveTimeout="00:30:00" 
sendTimeout="00:30:00">
  • 在 <serviceTimeouts transactionTimeout="00:30:00" /> 之前添加以下内容

在 Tridion\web\WebUI\WebRoot\Web.config - 更改 CoreService_netTcpBinding 绑定

<binding name="TcmNetTcpBinding" 
maxBufferSize="2147483647" 
maxReceivedMessageSize="2147483647" 
maxBufferPoolSize="2147483647" 
closeTimeout="00:30:00" 
openTimeout="00:30:00" 
receiveTimeout="00:30:00" 
sendTimeout="00:30:00"
transactionFlow="true" 
transactionProtocol="WSAtomicTransaction11">

这会将您的超时设置为 30 分钟。

于 2013-01-17T18:54:22.553 回答
3

这是事务超时。如果您通过 GUI 发布,您可以尝试:

  • 打开“%TRIDION_HOME%\Web\WebUI\WebRoot\web.config”
  • 转到 system.serviceModel -> 绑定 -> netTcpBinding -> 绑定(“TcmNetTcpBinding”)
  • 将“readerQuotas”值更改为如下所示:

readerQuotas maxArrayLength="10485760" maxBytesPerRead="5120" maxDepth="32" maxNameTableCharCount="81920" maxStringContentLength="10485760"/>

于 2012-03-02T08:11:18.380 回答
2

打开位于“C:\Program Files (x86)\Tridion\Bin”文件夹中的 TcmServiceHost.exe.config。导航到配置->system.serviceModel->behaviors->serviceBehaviors->behavior->Node。添加以下节点

<serviceTimeouts transactionTimeout="00:10:00" />

还要进行以下更改:

  1. 打开位于“%TRIDION_HOME%\Web\WebUI\WebRoot”的 web.config
  2. 导航到 system.serviceModel -> 绑定 -> netTcpBinding -> 绑定(“TcmNetTcpBinding”)
  3. 将“readerQuotas”节点替换为:

    <readerQuotas maxArrayLength="10485760" maxBytesPerRead="5120" maxDepth="32" maxNameTableCharCount="81920" maxStringContentLength="10485760"/>

如果这不起作用,请尝试以下配置:

<readerQuotas maxArrayLength="10485760" maxStringContentLength="10485760"/>
于 2012-05-14T06:22:45.280 回答
1

根据您的评论,此超时显然在数据库中。关于存储过程的消息说明了这一点。一旦发生数据库超时,那么中止事务和关闭套接字可能是不可避免的。

在 Tridion CM 服务器上,您可以在 Tridion 管理插件中调整超时设置。在“超时设置”节点中,有几个可能是相关的。

即便如此,这些默认值还是相当长的,如果您遇到它们,那么我建议您寻找根本原因。我首先检查优化器统计信息是否得到正确维护。

于 2012-05-12T17:43:55.163 回答