У меня много пользователей на моем веб-сайте (20000-60000 в день), который является сайтом загрузки для мобильных файлов. У меня есть удаленный доступ к моему серверу (сервер Windows 2008 R2).
Я уже получал ошибки" Сервер недоступен", но теперь вижу ошибку тайм-аута соединения.
Я не знаком с этим - почему это происходит и как я могу это исправить?
Полная ошибка ниже:
Ошибка сервера в приложении "/". Время ожидания истекло. Период ожидания прошедшее до завершения операции или на сервере, не отвечать на запросы. Заявление было прекращено. Описание: необработанное исключение произошло во время выполнения текущей сети запрос. Просмотрите трассировку стека для получения дополнительной информации о и где он возник в коде.
Сведения об исключении: System.Data.SqlClient.SqlException: таймаут истекший. Период ожидания истекает до завершения или сервер не отвечает. Заявление было прекращается.
Ошибка источника:
Необработанное исключение было создано во время выполнения текущий веб-запрос. Информация о происхождении и местонахождении исключение может быть идентифицировано с использованием трассы стека исключений ниже.
Трассировка стека:
[SqlException (0x80131904): время ожидания истекло. Период ожидания прошедшее до завершения операции или на сервере, не отвечать на запросы. Заявление было прекращено.]
System.Data.SqlClient.SqlConnection.OnError(исключение SqlException, 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 метод, результат DbAsyncResult) +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 [], Int32 & rowsAffected) +209
DataLayer.OnlineUsers.Update_SessionEnd_And_Online (Object Session_End, Boolean Online) +440
NiceFileExplorer.Global.Application_Start (отправитель объекта, EventArgs e) +163[HttpException (0x80004005): время ожидания истекло. Период ожидания прошедшее до завершения операции или на сервере, не отвечать на запросы. Заявление было прекращено.]
System.Web.HttpApplicationFactory.EnsureAppStartCalledForIntegratedMode(HttpContext контекст, приложение HttpApplication) +4052053
System.Web.HttpApplication.RegisterEventSubscriptionsWithIIS(IntPtr appContext, контекст HttpContext, обработчики MethodInfo []) +191
System.Web.HttpApplication.InitSpecial(состояние HttpApplicationState, Обработчики MethodInfo [], IntPtr appContext, контекст HttpContext) +352
System.Web.HttpApplicationFactory.GetSpecialApplicationInstance(IntPtr контекст приложения, контекст HttpContext) +407
System.Web.Hosting.PipelineRuntime.InitializeApplication(IntPtr appContext) +375[HttpException (0x80004005): время ожидания истекло. Период ожидания прошедшее до завершения операции или на сервере, не отвечать на запросы. Заявление было прекращено.]
System.Web.HttpRuntime.FirstRequestInit(контекст HttpContext) +11686928 System.Web.HttpRuntime.EnsureFirstRequestInit(контекст HttpContext) +141 System.Web.HttpRuntime.ProcessRequestNotificationPrivate(IIS7WorkerRequest wr, контекст HttpContext) +4863749
ИЗМЕНИТЬ ПОСЛЕ ОТВЕТОВ:
my Application_Start
в Global.asax
выглядит следующим образом:
protected void Application_Start(object sender, EventArgs e)
{
Application["OnlineUsers"] = 0;
OnlineUsers.Update_SessionEnd_And_Online(
DateTime.Now,
false);
AddTask("DoStuff", 10);
}
Вызывается хранимая процедура:
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
У меня есть два метода для онлайн-пользователей:
- используя
Application["OnlineUsers"] = 0;
- другой, использующий базу данных
Итак, для метода # 2 я reset все интернет-пользователи в Application_Start
. В этой таблице содержится более 482 751 записей.