Перед прочтением, пожалуйста, обратите внимание, что я прогуглил это и прочитал тонну статей по SO и в других местах, пока никаких предложений не сработало.
Я случайно получаю сообщение об ошибке тайм-аута, которое возникает при регистрациив мое приложение MVC 3.Это происходит более половины времени - во всех остальных случаях приложение входит в систему очень хорошо.Когда он не работает, он пытается примерно 10 секунд, а затем выдает ошибки.
Ошибка:
Исключение: «Произошла ошибка при выполнении определения команды. См.внутреннее исключение для деталей. "Внутреннее исключение: {"Время ожидания истекло. Время ожидания истекло до завершения операции, либо сервер не отвечает. \ R \ nВремя ожидания истекло. Время ожидания истекло до завершения операции, или сервер не отвечает."}
Это происходит внутри моего класса репозитория, который напрямую взаимодействует с платформой сущностей.
Кажется, что это происходит при входе в систему и просто быстрой проверке из базы данных, такой как:
return entities.Users.SingleOrDefault(user => user.UserName == userName);
return (entities.Users.SingleOrDefault(u => u.UserId == user.UserId || u.UserName == user.UserName) != null);
То, что я пробовал:
- Проверка SQL Server
- Интегрированная безопасность (я даже предоставил каждой учетной записи полный доступ к базе данных)
- Работа вне IIS
- Настройка чрезвычайно высокого времени ожидания соединения (Connect Timeout = 50000) в строке подключения.(У меня не задано здесь Тайм-аут команды по умолчанию)
- Установка CommandTimeout на 0, 5000, 100000, независимо от того, на моем соединении сущностей: entity.CommandTieout = 100000;
- Установка CommandTimeout внутрикаждый оператор using, где я использую экземпляр репозитория.
- Переключение SingleOrDefault в FirstOrDefault и т. д.
- Включение / отключение отложенной загрузки (почему нет?)
Если это поможет:
- Я использую пользовательскую роль и поставщика членства.
- Я просто делаю вызовы из моего контроллера в операторе использования (AccountRepository bleh = new AccountRepository ()), а AccountRepository реализует IDisposable и т. Д.
- Модель сущности находится в отдельном проекте.
- Я управляю сайтом в IIS.Он настроен с помощью интегрированного пула приложений 4.0.
- Все учетные записи имеют полный доступ к базе данных.
- Когда возникает ошибка, она не занимает столько времени, сколько я установил в Интернете.config (я думаю, 50000) или для команды timeout в репозитории.
- Это не сильно влияет на вход в систему, просто проверяет пользователя, получает роль пользователя, затем загружает некоторый небольшой объем данных, но ошибка всегда возникает при получениипользовательские данные при входе в систему.
- Когда я пробую его вне отладки, он повторяет ошибку четыре или пять раз (с отключенными пользовательскими ошибками).
Вот полное исключение из журнала событий:
Exception information:
Exception type: SqlException
Exception message: Timeout expired. The timeout period elapsed prior to completion of the operation or the server is not responding.
Timeout expired. The timeout period elapsed prior to completion of the operation or the server is not responding.
Timeout expired. The timeout period elapsed prior to completion of the operation or the server is not responding.
Timeout expired. The timeout period elapsed prior to completion of the operation or the server is not responding.
at System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection)
at System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning()
at System.Data.SqlClient.TdsParser.Run(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj)
at System.Data.SqlClient.SqlDataReader.ConsumeMetaData()
at System.Data.SqlClient.SqlDataReader.get_MetaData()
at System.Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader ds, RunBehavior runBehavior, String resetOptionsString)
at System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, Boolean async)
at System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method, DbAsyncResult result)
at System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method)
at System.Data.SqlClient.SqlCommand.ExecuteReader(CommandBehavior behavior, String method)
at System.Data.SqlClient.SqlCommand.ExecuteDbDataReader(CommandBehavior behavior)
at System.Data.EntityClient.EntityCommandDefinition.ExecuteStoreCommands(EntityCommand entityCommand, CommandBehavior behavior)