Ich habe viele Nutzer auf meiner Website (20000-60000 pro Tag), die eine Download-Site für mobile Dateien ist. Ich habe Fernzugriff auf meinen Server (Windows Server 2008-R2).
Ich habe erhalten "Server ist nicht verfügbar" Fehler, aber jetzt erhalte ich einen Timeout-Fehler für die Verbindung.
Ich bin mit diesem Problem nicht vertraut - warum tritt es auf und wie kann ich es beheben?
Der vollständige Fehler ist unten aufgeführt:
Serverfehler in der Anwendung '/'. Zeitüberschreitung abgelaufen. Der Timeout-Zeitraum ist abgelaufen, bevor der Vorgang abgeschlossen wurde, oder der Server reagiert nicht. antwortet. Die Anweisung wurde abgebrochen. Beschreibung: Eine unbehandelte Ausnahme ist während der Ausführung der aktuellen Webanforderung Anfrage. Bitte überprüfen Sie den Stack-Trace für weitere Informationen über den Fehler und dessen Ursprung im Code.
Details zur Ausnahme: System.Data.SqlClient.SqlException: Zeitüberschreitung abgelaufen. Die Timeout-Periode ist abgelaufen, bevor die Ausführung der Operation oder der Server antwortet nicht. Die Anweisung wurde abgebrochen.
Fehlerquelle:
Eine unbehandelte Ausnahme wurde während der Ausführung des Befehls aktuellen Web-Anfrage erzeugt. Informationen über den Ursprung und den Ort der der Ausnahme können anhand der nachstehenden Stapelverfolgung der Ausnahme ermittelt werden.
Stack Trace:
[SqlException (0x80131904): Zeitüberschreitung abgelaufen. Die Timeout-Periode ist abgelaufen, bevor der Vorgang abgeschlossen wurde, oder der Server antwortet. Die Anweisung wurde abgebrochen].
System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection) +404
System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning() +412
System.Data.SqlClient.TdsParser.Run(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj) +1363
System.Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader ds, RunBehavior runBehavior, String resetOptionsString) +6387741
System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, Boolean async) +6389442
System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method, DbAsyncResult result) +538
System.Data.SqlClient.SqlCommand.InternalExecuteNonQuery(DbAsyncResult result, String methodName, Boolean sendToPipe) +689
System.Data.SqlClient.SqlCommand.ExecuteNonQuery() +327
NovinMedia.Data.DbObject.RunProcedure(String storedProcName, IDataParameter[] parameters, Int32& rowsAffected) +209
DataLayer.OnlineUsers.Update_SessionEnd_And_Online(Object Session_End, Boolean Online) +440
NiceFileExplorer.Global.Application_Start(Object sender, EventArgs e) +163[HttpException (0x80004005): Die Zeitüberschreitung ist abgelaufen. Die Timeout-Periode abgelaufen, bevor der Vorgang abgeschlossen wurde, oder der Server reagiert nicht antwortet. Die Anweisung wurde abgebrochen].
System.Web.HttpApplicationFactory.EnsureAppStartCalledForIntegratedMode(HttpContext context, HttpApplication app) +4052053
System.Web.HttpApplication.RegisterEventSubscriptionsWithIIS(IntPtr appContext, HttpContext context, MethodInfo[] handlers) +191
System.Web.HttpApplication.InitSpecial(HttpApplicationState state, MethodInfo[] handlers, IntPtr appContext, HttpContext context) +352
System.Web.HttpApplicationFactory.GetSpecialApplicationInstance(IntPtr appContext, HttpContext context) +407
System.Web.Hosting.PipelineRuntime.InitializeApplication(IntPtr appContext) +375[HttpException (0x80004005): Die Zeitüberschreitung ist abgelaufen. Die Timeout-Zeit ist vor dem Abschluss des Vorgangs abgelaufen, oder der Server ist nicht antwortet. Die Anweisung wurde abgebrochen].
System.Web.HttpRuntime.FirstRequestInit(HttpContext context) +11686928 System.Web.HttpRuntime.EnsureFirstRequestInit(HttpContext context) +141 System.Web.HttpRuntime.ProcessRequestNotificationPrivate(IIS7WorkerRequest wr, HttpContext context) +4863749
NACH ANTWORTEN BEARBEITEN:
meine Application_Start
en Global.asax
ist wie unten:
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, ist:
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-Nutzer zu gewinnen:
- mit
Application["OnlineUsers"] = 0;
- die andere über die Datenbank
Für Methode #2 habe ich also alle OnlineUsers auf Application_Start
. Die Tabelle enthält über 482.751 Datensätze.