Невозможно избавиться от исключения "физическое соединение не используется"
Я собираюсь застрелить себя. Прошло несколько недель, пытаясь решить эту проблему. У нас есть веб-приложение ASP.NET MVC 4, которое использует SQL Server 2012 и Entity Framework как ORM и Unity для IoC. Веб-приложение размещено на Amazon EC2. Я начал получать исключение "Физическое соединение не используется". Это происходит несколько раз в день. Я искал много статей и форумов и пробовал все возможные предложения:
- Пробовал удалять пул из строки подключения "Опрос = ложь"
- Пробовал ограничивать размер пула и срок службы соединения
- Попробовал сменить LifetimeManager Unity на HierarchicalLifetimeManager, PerRequestLifetimeManager. Также убедитесь, что контекст сущностей расположен после окончания запроса.
- Удалены все ссылки TransactionScope
Когда происходит исключение, единственный способ восстановить приложение - перезагрузить сервер, что очень плохо!!!
Это полное исключение:
При отправке запроса на сервер произошла ошибка транспортного уровня. (поставщик: поставщик сеанса, ошибка: 19 - физическое соединение не используется)
Ответы
Ответ 1
Теперь я подтверждаю, изменив строку подключения на сервере, чтобы использовать ".". для источника данных вместо имени домена исключение, похоже, исчезло. Очень странно, поскольку доменное имя использовалось раньше. Должно быть какое-то обновление на SQL Server
Ответ 2
Я знаю, что это старый пост, но у меня недавно было ужасное время с этой ошибкой, и в любом из блогов не было никаких решений.
Подробные сведения о моей проблеме:
Веб-приложение ASP.NET с целевой платформой .NET Framework 4.5, MVC ver. 5.2.3, Entity ver. 6.0.0.0, MS SQLServer Express 2014. Моя система dev работает под управлением Windows 7 Pro SP1.
Симптомы: Ошибка внезапно возникла (я не работал над проектом почти три недели, и в это время он функционировал нормально). Когда я запустил приложение, после входа в систему второй запрос, отправленный в базу данных с помощью структуры Entity ALLWAYS, сгенерировал ошибку "Возникла ошибка транспортного уровня при получении результатов с сервера. (Поставщик: поставщик сеанса, ошибка: 19 - Физическое соединение не используется)". Не важно, какая таблица была запрошена. Ошибка не прерывалась, и перезагрузка сервера не помогла. Ошибка произошла с использованием служб IIS и IIS.
SqlConnection.ClearAllPools() предотвратил ошибку только для одного запроса, и я не хотел добавлять это перед каждым вызовом Entity в программе. Я пробовал каждое решение на всех блогах безрезультатно, даже решения для других ошибок на уровне транспорта. Я откатил обновления пакетов для своих ссылок, пытаясь вернуться в рабочее состояние. Ничего!
Решение: Виной было обновление безопасности Microsoft SQL Server 2014 SP1 (KB3070446)! Я откатил это обновление, и все работало как шарм!
Я потерял два дня работы разработчиков, занимающихся этой проблемой, надеюсь, этот пост может помочь кому-то еще избежать этой агонии!
Ответ 3
Я тоже столкнулся с этой ошибкой. В моем случае проблема заключалась в том, что соединение было закрыто сервером базы данных, но соединение оставалось действительным в пуле соединений моего приложения.
Сброс пула приложений завершил работу моего приложения.
Ответ 4
Если эта ошибка возникла после удаления MaxDegreeOfParallelism, которая по умолчанию установлена на -1 или без ограничения при установке db.Database.CommandTimeout = 0.
Предложение состоит в том, чтобы явно установить MaxDegreeOfParallelism в безопасное значение.
Другой сценарий:
Сетевое соединение не работает даже в течение нескольких секунд, пока приложение взаимодействует с базой данных сервера.
Ответ 5
Соединение с базой данных закрывается сервером базы данных. Соединение остается действительным в пуле подключений вашего приложения; в результате, когда вы берете общую строку соединения и пытаетесь выполнить ее, вы не сможете добраться до базы данных. Если вы разрабатываете Visual Studio, просто закройте временный веб-сервер на панели задач.
Если это происходит в процессе производства, сброс пула приложений для вашего веб-сайта должен переработать пул соединений.
Возможно, из-за обновления системы предотвращения вторжений.
Пожалуйста, попробуйте обратиться к следующей теме:
http://forums.asp.net/t/1908976.aspx
Надеюсь, это поможет.
Ответ 6
Для меня это была ошибка DNS, диагностированная потому, что использование имени сервера в строке подключения приводило к ошибке, но использование IP работало нормально. Откройте командную строку, запустите быстрый ipconfig/flushdns
чтобы посмотреть, поможет ли это.
Ответ 7
У меня была такая же ошибка в течение 2 дней! и даже не знал, почему это вдруг произошло? !!
-
Как оказалось: у меня возникла проблема с доступом к сетевой аутентификации (из-за моего WiFi-соединения)... и как только я отключил/отключил свой WiFi и подключился только через кабельное (безопасное и стабильное) соединение... ошибка исчезла.,
-
Также я сделал следующее, например:
Перезапустил все службы SQL Server. Перезапустил мой экземпляр SQLServer. Добавил эти реквизиты в мою строку подключения DEF..
Connection Lifetime=30; Max Pool Size=350;Connection Timeout=30;Connection Lifetime=0;ConnectRetryCount=3;ConnectRetryInterval=10;