Ho molti utenti sul mio sito Web (20000-60000 al giorno), che è un sito di download di file mobili. Ho accesso remoto al mio server (windows server 2008-R2).
Ho ricevuto errori "Il server non è disponibile" prima, ma ora vedo un errore di timeout della connessione.
Non ho familiarità con questo - perché si verifica e come posso ripararlo?
L'errore completo è di seguito:
Errore del server nell'applicazione '/' Timeout scaduto. Il periodo di timeout è trascorso prima del completamento dell'operazione o il server non risponde. La dichiarazione è stata chiusa. Descrizione: si è verificata un'eccezione non gestita durante l'esecuzione della richiesta Web corrente. Esaminare la traccia dello stack per ulteriori informazioni sull'errore e sulla sua origine nel codice.
Dettagli eccezione: System.Data.SqlClient.SqlException: Timeout scaduto. Il periodo di timeout è trascorso prima del completamento dell'operazione o il server non risponde. La dichiarazione è stata chiusa.
Errore sorgente:
È stata generata un'eccezione non gestita durante l'esecuzione della richiesta Web corrente. Le informazioni relative all'origine e alla posizione dell'eccezione possono essere identificate utilizzando la traccia dello stack delle eccezioni riportata di seguito.
Stack Trace:
[SqlException (0x80131904): Timeout scaduto. Il periodo di timeout è trascorso prima del completamento dell'operazione o il server non risponde. L'istruzione è stata terminata.]
System.Data.SqlClient.SqlConnection.OnError (eccezione SqlException, Boolean breakConnection) +404
System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning () +412
System.Data.SqlClient.TdsParser.haun , SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj) +1363
System.Data.SqlClient.SqlCommand.FinishExecuteReader (SqlOe, Comando
System.Data.SqlClient.SqlCommand.RunExecuteReaderTds (CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, Boolean async) +6389442
System.Data.SqlCandandEeReExcuteReader 538
System.Data.SqlClient.SqlCommand.InternalExecuteNonQuery (risultato DbAsyncResult, String methodName, Boolean sendToPipe) +689
System.Data.SqlClient.SqlCommand.ExecuteNonQuery () +327
NovinMedia.Data.DrocPodPrame , Int32 & rowsAffected) +209
DataLayer.OnlineUsers.Update_SessionEnd_And_Online (Object Session_End, Boolean Online) +440
NiceFileExplorer.Global.Application_Start (mittente oggetto, EventArgs e) +163[HttpException (0x80004005): Timeout scaduto. Il periodo di timeout è trascorso prima del completamento dell'operazione o il server non risponde. L'istruzione è stata terminata.]
System.Web.HttpApplicationFactory.EnsureAppStartCalledForIntegratedMode (contesto HttpContext, app HttpApplication) +4052053
System.Web.HttpApplication.RegisterEventSubscriptionsWithIIS (IntPtr appContext, HttpContext) metodo
. InitSpecial (stato HttpApplicationState, gestori MethodInfo [], intPtr appContext, contesto HttpContext) +352
System.Web.HttpApplicationFactory.GetSpecialApplicationInstance (contesto IntCtr appContext, HttpContext) +407
System.Web.Hosting.Pipeline[HttpException (0x80004005): Timeout scaduto. Il periodo di timeout è trascorso prima del completamento dell'operazione o il server non risponde. L'istruzione è stata terminata.]
System.Web.HttpRuntime.FirstRequestInit (contesto HttpContext) +11686928 System.Web.HttpRuntime.EnsureFirstRequestInit (contesto HttpContext) +141 System.Web.HttpRuntime.ProcessRequestNotificationPrivate (http: Equist
MODIFICA DOPO RISPOSTE: il
mio Application_Start
in Global.asax
è come di seguito:
protected void Application_Start(object sender, EventArgs e)
{
Application["OnlineUsers"] = 0;
OnlineUsers.Update_SessionEnd_And_Online(
DateTime.Now,
false);
AddTask("DoStuff", 10);
}
La procedura memorizzata chiamata è:
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
Ho due metodi per ottenere utenti online:
- utilizzando
Application["OnlineUsers"] = 0;
- l'altro usando il database
Quindi, per il metodo n. 2 ho resettato tutti gli utenti online su Application_Start
. Ci sono oltre 482.751 record in quella tabella.