Ich habe viele Benutzer auf meiner Website (20000-60000 pro Tag), die eine Download-Site für mobile Dateien ist. Ich habe Remotezugriff auf meinen Server (Windows Server 2008-R2).
Ich habe bereits Fehler "Server ist nicht verfügbar" erhalten , sehe jetzt jedoch einen Verbindungszeitüberschreitungsfehler.
Ich bin damit nicht vertraut - warum tritt es auf und wie kann ich es beheben?
Der vollständige Fehler ist unten:
Serverfehler in '/' Anwendung. Zeitüberschreitung. Die Zeitspanne, die vor Abschluss des Vorgangs verstrichen ist oder der Server nicht reagiert. Die Anweisung wurde beendet. Beschreibung: Während der Ausführung der aktuellen Webanforderung ist eine nicht behandelte Ausnahme aufgetreten. Bitte überprüfen Sie die Stapelverfolgung, um weitere Informationen über den Fehler und dessen Ursprung im Code zu erhalten.
Ausnahmedetails: System.Data.SqlClient.SqlException: Zeitüberschreitung abgelaufen. Die Zeitspanne, die vor Abschluss des Vorgangs verstrichen ist oder der Server nicht reagiert. Die Anweisung wurde beendet.
Quellfehler:
Während der Ausführung der aktuellen Webanforderung wurde eine nicht behandelte Ausnahme generiert. Informationen zum Ursprung und Ort der Ausnahme können mithilfe der folgenden Ausnahmestapelverfolgung identifiziert werden.
Stapelverfolgung:
[SqlException (0x80131904): Zeitüberschreitung abgelaufen. Die Zeitspanne, die vor Abschluss des Vorgangs verstrichen ist oder der Server nicht reagiert. Die Anweisung wurde beendet.]
System.Data.SqlClient.SqlConnection.OnError (SqlException-Ausnahme, Boolean breakConnection) +404
System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning () +412
System.Data.SqlClient.TdsBars , SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet BulkCopyHandler, TdsParserStateObject stateObj) +1363
System.Data.SqlClient.SqlCommand.FinishExecuteReader (SqlDataBeaReaReaRe
System.Data.SqlClient.SqlCommand.RunExecuteReaderTds (CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, Boolean async) +6389442
System.Data.SqlClient.SqlCommand 538
System.Data.SqlClient.SqlCommand.InternalExecuteNonQuery (DbAsyncResult-Ergebnis, String methodName, Boolean sendToPipe) +689
System.Data.SqlClient.SqlCommand.ExecuteNonQuery () +327
NovinMediaPar , Int32 & rowsAffected) +209
DataLayer.OnlineUsers.Update_SessionEnd_And_Online (Object Session_End, Boolean Online) +440
NiceFileExplorer.Global.Application_Start (Objektabsender, EventArgs e) +163[HttpException (0x80004005): Zeitüberschreitung abgelaufen. Die Zeitspanne, die vor Abschluss des Vorgangs verstrichen ist oder der Server nicht reagiert. Die Anweisung wurde beendet.]
System.Web.HttpApplicationFactory.EnsureAppStartCalledForIntegratedMode (HttpContext-Kontext, HttpApplication-App) +4052053
System.Web.HttpApplication.RegisterEventSubscriptionsWithIIS (IntPtr appContext, HttpC
. InitSpecial (Httpapplicationstate - Zustand, Method [] Lader, IntPtr appContext, Httpcontext context) +352
System.Web.HttpApplicationFactory.GetSpecialApplicationInstance (IntPtr appContext, Httpcontext context) +407
System.Web.Hosting.PipelineRuntime.InitializeApplication (IntPtr appContext) +375[HttpException (0x80004005): Zeitüberschreitung abgelaufen. Die Zeitspanne, die vor Abschluss des Vorgangs verstrichen ist oder der Server nicht reagiert. Die Anweisung wurde beendet.]
System.Web.HttpRuntime.FirstRequestInit (HttpContext-Kontext) +11686928 System.Web.HttpRuntime.EnsureFirstRequestInit (HttpContext-Kontext) +141 System.Web.HttpRuntime.ProcessRequestNr
EDIT NACH ANTWORTEN:
meine Application_Start
in Global.asax
ist wie folgt:
protected void Application_Start(object sender, EventArgs e)
{
Application["OnlineUsers"] = 0;
OnlineUsers.Update_SessionEnd_And_Online(
DateTime.Now,
false);
AddTask("DoStuff", 10);
}
Die gespeicherte Prozedur, die aufgerufen wird, lautet:
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
Ich habe zwei Methoden, um Online-Benutzer zu erhalten:
- mit
Application["OnlineUsers"] = 0;
- der andere benutzt die Datenbank
Für Methode 2 habe ich alle OnlineUsers auf zurückgesetzt Application_Start
. Diese Tabelle enthält über 482.751 Datensätze.