J'ai de nombreux utilisateurs sur mon site Web (20000-60000 par jour), qui est un site de téléchargement de fichiers mobiles. J'ai un accès à distance à mon serveur (serveur Windows 2008-R2).
J'ai déjà reçu des erreurs «Le serveur n'est pas disponible» , mais je vois maintenant une erreur de délai de connexion.
Je ne connais pas cela - pourquoi cela se produit-il et comment puis-je le corriger?
L'erreur complète est ci-dessous:
Erreur serveur dans l'application '/' Le délai a expiré. Le délai d'expiration s'est écoulé avant la fin de l'opération ou le serveur ne répond pas. La déclaration est terminée. Description: une exception non gérée s'est produite lors de l'exécution de la demande Web en cours. Veuillez consulter la trace de la pile pour plus d'informations sur l'erreur et son origine dans le code.
Détails de l'exception: System.Data.SqlClient.SqlException: le délai a expiré. Le délai d'expiration s'est écoulé avant la fin de l'opération ou le serveur ne répond pas. La déclaration est terminée.
Erreur source:
Une exception non gérée a été générée lors de l'exécution de la demande Web actuelle. Les informations concernant l'origine et l'emplacement de l'exception peuvent être identifiées à l'aide de la trace de pile d'exceptions ci-dessous.
Trace de la pile:
[SqlException (0x80131904): le délai a expiré. Le délai d'expiration s'est écoulé avant la fin de l'opération ou le serveur ne répond pas. L'instruction est terminée.]
System.Data.SqlClient.SqlConnection.OnError (exception SqlException, Boolean breakConnection) +404
System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning () +412
System.Data.SqlClient.TdsParser.Run (RunBB , SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj) +1363
System.Data.SqlClient.SqlCommand.FinishExecuteReader (SqlDataReaderS3, String + RunBeServices, B6)
System.Data.SqlClient.SqlCommand.RunExecuteReaderTds (CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, Boolean async) +6389442
System.Data.SqlClient.SqlCommand.RunExecuteReadeBordBehavior, RunBehavior, RunBe 538
System.Data.SqlClient.SqlCommand.InternalExecuteNonQuery (résultat DbAsyncResult, String methodName, Boolean sendToPipe) +689
System.Data.SqlClient.SqlCommand.ExecuteNonQuery () +327
Paramètres NovinMedia.Data.DbObject.RunProced [StringProcedName , Int32 et lignes affectées) +209
DataLayer.OnlineUsers.Update_SessionEnd_And_Online (Object Session_End, Boolean Online) +440
NiceFileExplorer.Global.Application_Start (expéditeur d'objet, EventArgs e) +163[HttpException (0x80004005): le délai a expiré. Le délai d'expiration s'est écoulé avant la fin de l'opération ou le serveur ne répond pas. L'instruction a été terminée.]
System.Web.HttpApplicationFactory.EnsureAppStartCalledForIntegratedMode (contexte HttpContext, application HttpApplication) +4052053
System.Web.HttpApplication.RegisterEventSubscriptionsWithIIS (IntPtr appContext, HttpContext) ApplicationContextWordInfo
. InitSpecial (état HttpApplicationState, gestionnaires MethodInfo [], IntPtr appContext, contexte HttpContext) +352
System.Web.HttpApplicationFactory.GetSpecialApplicationInstance (IntPtr appContext, HttpContext context) +407
System.Web.Hosting.PipelineRapp + Application[HttpException (0x80004005): le délai a expiré. Le délai d'expiration s'est écoulé avant la fin de l'opération ou le serveur ne répond pas. L'instruction a été arrêtée.]
System.Web.HttpRuntime.FirstRequestInit (contexte HttpContext) +11686928 System.Web.HttpRuntime.EnsureFirstRequestInit (contexte HttpContext) +141 System.Web.HttpRuntime.ProcessRequestNotificationWorkContext
EDIT APRÈS REPONSES:
mon Application_Start
en Global.asax
est comme ci - dessous:
protected void Application_Start(object sender, EventArgs e)
{
Application["OnlineUsers"] = 0;
OnlineUsers.Update_SessionEnd_And_Online(
DateTime.Now,
false);
AddTask("DoStuff", 10);
}
La procédure stockée appelée est:
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
J'ai deux méthodes pour obtenir des utilisateurs en ligne:
- en utilisant
Application["OnlineUsers"] = 0;
- l'autre utilisant la base de données
Donc, pour la méthode # 2, je réinitialise tous les OnlineUsers à Application_Start
. Il y a plus de 482 751 enregistrements dans ce tableau.