Search code examples
sqltridiontridion-2011

SDL Tridion times out when publishing multiple items


When using SDL Tridion 2011 SP1 we sometimes receive GUI errors when we perform task on multiple items (e.g. publishing 1000 components from one folder at once). Publish about 100 items from the same list works perfectly.

The error we see is in the CME/GUI is as follows:

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.

There is an additional error in the Windows Event Viewer in the Tridion Error log as follows:

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

Which timeout values are being used here, and how can we increase these timeout values?


Solution

  • In %windir%\Microsoft.NET\Framework64\v4.0.30319\Config\machine.config and %windir%\Microsoft.NET\Framework\v4.0.30319\Config\machine.config

    • Change allowExeDefinition from “MachineOnly” to “MachineToApplication”
    • Before < /configuration > add the section below

    In Tridion\config\Tridion.ContentManager.config - Provide a value for transactionTimeout in seconds < session transactionTimeout="3600" />

    In Tridion\bin\TcmServiceHost.exe.config - change the CoreService_netTcpBinding binding

    <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">
    
    • Add the following before < serviceTimeouts transactionTimeout="00:30:00" />

    in Tridion\web\WebUI\WebRoot\Web.config - change the CoreService_netTcpBinding binding

    <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">
    

    This sets your timeouts to 30 minutes.