Tengo muchos usuarios en mi sitio web (20000-60000 por día), que es un sitio de descarga de archivos móviles. Tengo acceso remoto a mi servidor (Windows Server 2008-R2).
He recibido errores de "El servidor no está disponible" antes, pero ahora veo un error de tiempo de espera de conexión.
No estoy familiarizado con esto: ¿por qué ocurre y cómo puedo solucionarlo?
El error completo está abajo:
Error del servidor en la aplicación '/'. Tiempo agotado. El tiempo de espera transcurrido antes de la finalización de la operación o el servidor no responde. La instrucción se ha terminado. Descripción: se produjo una excepción no controlada durante la ejecución de la solicitud web actual. Revise el seguimiento de la pila para obtener más información sobre el error y dónde se originó en el código.
Detalles de la excepción: System.Data.SqlClient.SqlException: Tiempo de espera expirado. El tiempo de espera transcurrido antes de la finalización de la operación o el servidor no responde. La instrucción se ha terminado.
Error de fuente:
Se generó una excepción no controlada durante la ejecución de la solicitud web actual. La información sobre el origen y la ubicación de la excepción se puede identificar utilizando el seguimiento de la pila de excepciones a continuación.
Seguimiento de pila:
[SqlException (0x80131904): Tiempo de espera expirado. El período de tiempo de espera transcurrido antes de la finalización de la operación o el servidor no responde. La declaración ha finalizado.]
System.Data.SqlClient.SqlConnection.OnError (excepción SqlException, boolean breakConnection) +404
System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning () +412
System.Data.SqlClient.TdsParser.RunBehader. , SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj) +1363
System.Data.SqlClient.SqlCommand.FinishExecuteReader (SqlDataReder,
System.Data.SqlClient.SqlCommand.RunExecuteReaderTds (CommandBehavior cmdBehavior, runBehavior runBehavior, Boolean returnStream, async Boolean) 6389442
System.Data.SqlClient.SqlCommand.RunExecuteReader (CommandBehavior cmdBehavior, runBehavior runBehavior, Boolean returnStream, método de cadena, resultado DbAsyncResult) + 538
System.Data.SqlClient.SqlCommand.InternalExecuteNonQuery (DbAsyncResult result, String methodName, Boolean sendToPipe) +689
System.Data.SqlClient.SqlCommand.ExecuteNonQuery () +327
NovinMedia.Data.DbProcea.rec. , Int32 & rowsAffected) +209
DataLayer.OnlineUsers.Update_SessionEnd_And_Online (Object Session_End, Boolean Online) +440
NiceFileExplorer.Global.Application_Start (remitente de objetos, EventArgs e) +163[HttpException (0x80004005): Tiempo de espera expirado. El período de tiempo de espera transcurrido antes de la finalización de la operación o el servidor no responde. La declaración ha sido terminada.]
System.Web.HttpApplicationFactory.EnsureAppStartCalledForIntegratedMode (HttpContext context, HttpApplication app) +4052053
System.Web.HttpApplication.RegisterEventSubscriptionsWithIIS (IntPtrp.Contexto
. Http . InitSpecial (estado HttpApplicationState, manejadores MethodInfo [], IntPtr appContext, contexto HttpContext) +352
System.Web.HttpApplicationFactory.GetSpecialApplicationInstance (IntPtr appContext, HttpContext context) +407
System.Web.HittingApp.[HttpException (0x80004005): Tiempo de espera expirado. El período de tiempo de espera transcurrido antes de la finalización de la operación o el servidor no responde. La declaración ha sido terminada.]
System.Web.HttpRuntime.FirstRequestInit (contexto HttpContext) +11686928 System.Web.HttpRuntime.EnsureFirstRequestInit (HttpContext context) +141 System.Web.HttpRuntime.ProcessRequestNotificationPrivate (I36)
Edición después RESPUESTAS:
mi Application_Start
en Global.asax
es como a continuación:
protected void Application_Start(object sender, EventArgs e)
{
Application["OnlineUsers"] = 0;
OnlineUsers.Update_SessionEnd_And_Online(
DateTime.Now,
false);
AddTask("DoStuff", 10);
}
El procedimiento almacenado que se llama es:
ALTER Procedure [dbo].[sp_OnlineUsers_Update_SessionEnd_And_Online]
@Session_End datetime,
@Online bit
As
Begin
Update OnlineUsers
SET
[Session_End] = @Session_End,
[Online] = @Online
End
Tengo dos métodos para obtener usuarios en línea:
- utilizando
Application["OnlineUsers"] = 0;
- el otro usando la base de datos
Entonces, para el método # 2 reinicio todos los usuarios en línea en Application_Start
. Hay más de 482,751 registros en esa tabla.