У меня много пользователей на моем веб-сайте (20000-60000 в день), который является сайтом для загрузки мобильных файлов. У меня есть удаленный доступ к моему серверу (windows server 2008-R2).
Раньше я получал "Сервер недоступен" ошибки, но теперь я вижу ошибку таймаута соединения.
Я не знаком с этим - почему это происходит и как я могу это исправить?
Полная версия ошибки приведена ниже:
Server Error in '/' Application. Таймаут истек. Период тайм-аута истек до завершения операции или сервер не отвечает. Операция была завершена. Описание: необработанное исключение произошло во время выполнения текущего веб-запроса запроса. Пожалуйста, просмотрите трассировку стека для получения дополнительной информации об этой об ошибке и о том, где она возникла в коде.
Подробности исключения: System.Data.SqlClient.SqlException: Таймаут истек. Истек период тайм-аута до завершения или сервер не отвечает. Операция была завершено.
Ошибка источника:
Не обработанное исключение было сгенерировано во время выполнения текущего веб-запроса. Информацию о происхождении и местоположении исключения можно определить с помощью приведенной ниже трассировки стека исключений.
Трассировка стека:
[SqlException (0x80131904): Таймаут истек. Период тайм-аута истек до завершения операции или сервер не отвечает. Операция была завершена]
. 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): Таймаут истек. Период тайм-аута истек до завершения операции или сервер не отвечает. Операция была завершена]
. 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): Таймаут истек. Период тайм-аута истек до завершения операции или сервер не отвечает. Операция была завершена]
. System.Web.HttpRuntime.FirstRequestInit(HttpContext context) +11686928 System.Web.HttpRuntime.EnsureFirstRequestInit(HttpContext context) +141 System.Web.HttpRuntime.ProcessRequestNotificationPrivate(IIS7WorkerRequest wr, HttpContext context) +4863749
EDIT AFTER ANSWERS:
мой 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 записи.