У меня много пользователей на моем веб-сайте (20000-60000 в день), который является сайтом загрузки для мобильных файлов.У меня есть удаленный доступ к моему серверу (Windows Server 2008-R2).Ранее я получал «Сервер недоступен» , но теперь я вижу ошибку тайм-аута соединения.Я не знаком с этим - почему это происходит и как я могу это исправить?
Полная ошибка приведена ниже:
Ошибка сервера в приложении '/'.Тайм-аут истек.Время ожидания истекло до завершения операции или сервер не отвечает.Заявление было прекращено.Описание: во время выполнения текущего веб-запроса произошло необработанное исключение.Просмотрите трассировку стека для получения дополнительной информации об ошибке и о том, где она возникла в коде.
Сведения об исключении: System.Data.SqlClient.SqlException: Истекло время ожидания.Время ожидания истекло до завершения операции или сервер не отвечает.Оператор был прерван.
Ошибка источника:
Во время выполнения текущего веб-запроса было сгенерировано необработанное исключение.Информацию о происхождении и местонахождении исключения можно определить с помощью следующей трассировки стека исключений.
Трассировка стека:
[SqlException (0x80131904): истекло время ожидания.Время ожидания истекло до завершения операции или сервер не отвечает.Оператор был прерван.]
System.Data.SqlClient.SqlConnection.OnError (исключение SqlException, логическое 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, логический returnStream, логический асинхронный) + 6389442
System.Data.Sqlehae ReeBehBehBeachРезультат DbAsyncResult) + 538
System.Data.SqlClient.SqlCommand.InternalExecuteNonQuery (результат DbAsyncResult, метод String methodName, логическое значение sendToPipe) +689
System.Data.SqlClient.SqlCommand.ExecuteNonQuery () + 327
NovinMedia.Data.DbObject.RunProcedure (строка хранимых параметров ProProName, IDataParameter [], Int32 & columnsActed) + 209
DataLayOnd_Ond_OUID_OUID_OUID_OUID_OIDObject Session_End, Boolean Online) + 440
NiceFileExplorer.Global.Application_Start (Отправитель объекта, EventArgs e) + 163
[HttpException (0x80004005): истекло время ожидания.Время ожидания истекло до завершения операции или сервер не отвечает.Оператор был прерван.]
System.Web.HttpApplicationFactory.EnsureAppStartCalledForIntegratedMode (контекст HttpContext, приложение HttpApplication) + 4052053
System.Web.HttpApplication.RegisterEventSubscriptionsWttpIntextTentInteTisPTTTIN
System.Web.HttpApplication.InitSpecial (состояние HttpApplicationState, обработчики MethodInfo [], IntPtr appContext, контекст HttpContext) + 352
System.Web.HttpApplicationFactory.GetSpecialApplicationInstance (контекст IntPttt).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
РЕДАКТИРОВАТЬ ПОСЛЕ ОТВЕТОВ:
мой 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 я сбросил все OnlineUsers на Application_Start
. В этой таблице более 482 751 записей.