Mam wielu użytkowników na mojej stronie internetowej (20000–60000 dziennie), która jest witryną pobierania plików mobilnych. Mam zdalny dostęp do mojego serwera (Windows Server 2008-R2). Wcześniej
otrzymywałem błędy „Serwer jest niedostępny” , ale teraz widzę błąd przekroczenia limitu czasu połączenia.
Nie znam się na tym - dlaczego tak się dzieje i jak mogę to naprawić?
Pełny błąd znajduje się poniżej:
Błąd serwera w aplikacji „/”. Limit czasu upłynął. Limit czasu upłynął przed zakończeniem operacji lub serwer nie odpowiada. Instrukcja została zakończona. Opis: Wystąpił nieobsługiwany wyjątek podczas wykonywania bieżącego żądania internetowego. Przejrzyj dane śledzenia stosu, aby uzyskać więcej informacji o błędzie i jego źródle w kodzie.
Szczegóły wyjątku: System.Data.SqlClient.SqlException: Upłynął limit czasu. Limit czasu upłynął przed zakończeniem operacji lub serwer nie odpowiada. Instrukcja została zakończona.
Błąd źródła:
Podczas obsługi bieżącego żądania sieciowego wygenerowano nieobsługiwany wyjątek. Informacje dotyczące pochodzenia i lokalizacji wyjątku można zidentyfikować za pomocą śledzenia stosu wyjątków poniżej.
Ślad stosu:
[SqlException (0x80131904): Upłynął limit czasu. Limit czasu upłynął przed zakończeniem operacji lub serwer nie odpowiada. Instrukcja została zakończona.]
System.Data.SqlClient.SqlConnection.OnError (wyjątek SqlException, Boolean breakConnection) +404
System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning () +412
System.Data.SqlClient.TdsParserhe Run Run , SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj) +1363
System.Data.SqlClient.SqlCommand.FinishExecuteReader (SqlDataBeRaverior, Run RunSer
System.Data.SqlClient.SqlCommand.RunExecuteReaderTds (CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, Boolean async) +6389442
System.Data.SqlClient.SqlCommand.RunExecuteBeReHeReRe 538
System.Data.SqlClient.SqlCommand.InternalExecuteNonQuery (wynik DbAsyncResult, ciąg MethodName, Boolean sendToPipe) +689
System.Data.SqlClient.SqlCommand.ExecuteNonQuery () +327
Parametry NovinMediaDataDataProcedura , Int32 i wiersze zmienione) +209
DataLayer.OnlineUsers.Update_SessionEnd_And_Online (Object Session_End, Boolean Online) +440
NiceFileExplorer.Global.Application_Start (Nadawca obiektu, EventArgs e) +163[HttpException (0x80004005): Upłynął limit czasu. Limit czasu upłynął przed zakończeniem operacji lub serwer nie odpowiada. Oświadczenie zostało zakończone.]
System.Web.HttpApplicationFactory.EnsureAppStartCalledForIntegratedMode (HttpContext kontekst, HttpApplication app) +4052053
System.Web.HttpApplication.RegisterEventSubscriptionsWithIIS (IntPtr appContext, HttpContext kontekst, MethodInfo [] koparki) +191
System.Web.HttpApplication. InitSpecial (stan HttpApplicationState, procedury obsługi MethodInfo [], kontekst aplikacji IntPtr, kontekst HttpContext) +352
System.Web.HttpApplicationFactory.GetSpecialApplicationInstance (kontekst aplikacji IntPtr, kontekst kontekstu HttpContext) +407
System.Web.Hosting.PipextRuntime.Info[HttpException (0x80004005): Upłynął limit czasu. Limit czasu upłynął przed zakończeniem operacji lub serwer nie odpowiada. Instrukcja została zakończona.]
System.Web.HttpRuntime.FirstRequestInit (kontekst HttpContext) +11686928 System.Web.HttpRuntime.EnsureFirstRequestInit (kontekst HttpContext) +141 System.Web.HttpRuntime.ProcessRequestNotificationPrivate II Nota prywatna7 Nota prywatna
EDIT PO odpowiada:
my Application_Start
w Global.asax
to jak poniżej:
protected void Application_Start(object sender, EventArgs e)
{
Application["OnlineUsers"] = 0;
OnlineUsers.Update_SessionEnd_And_Online(
DateTime.Now,
false);
AddTask("DoStuff", 10);
}
Wywoływana procedura składowana to:
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
Mam dwie metody pozyskiwania użytkowników online:
- za pomocą
Application["OnlineUsers"] = 0;
- drugi używa bazy danych
Tak więc dla metody nr 2 resetuję wszystkich użytkowników online o Application_Start
. W tej tabeli znajduje się ponad 482 751 rekordów.