While signing in to an application or navigating after login, the page was spinning for about a minute and giving a timeout error. The error message:
The open operation did not complete within the allotted timeout of 00:01:00. The time allotted to this operation may have been a portion of a longer timeout. The socket transfer timed out after 00:01:00. You have exceeded the timeout set on your binding.
The application utilizes a WCF service. We collected a dump file from both the ASPX page and WCF service while the page was spinning. Here are the exceptions we saw in the dump files:
Exception Type : System.Net.Sockets.SocketException
Message: An existing connection was forcibly closed by the remote host
System.ServiceModel.Channels.SocketConnection.Write(Byte, Int32, Int32, Boolean, System.TimeSpan)
Exception Type : System.ServiceModel.CommunicationException
Message: The server did not provide a meaningful reply; this might be caused by a contract mismatch, a premature session shutdown or an internal server error.
Exception Type : System.IO.PipeException
Message: There was an error reading from the pipe: The pipe has been ended. (109, 0x6d).
System.ServiceModel.Channels.PipeConnection.OnAsyncReadComplete(Boolean, Int32, Int32)
The Event Viewer showed these errors as well:
Solution for The Timeout Error Caused by Idle Time-Out Action Suspend
For this website, Idle Time-out Action in the application pool settings was set to “Suspend”. This option isn’t helpful in many scenarios. I don’t recommend using it.
Setting Idle Time-out Action to Terminate solved the issue. Website started displaying pages without any issues.
Note: For this IIS server, there was a separate issue. The appdomain was being recycled intermittently. We figured this was because of the antivirus software. It is recommended to exclude certain folders from antivirus scan in IIS servers.
If you like to find out who change the application pool settings, please check this post out.
For a timeout issue related to the communication with database, please have a look at the steps in this post: The timeout period elapsed prior to obtaining a connection from the pool