Почему я получаю эту ошибку периодически? "Сервер не найден или не был доступен" - PullRequest
11 голосов
/ 23 июня 2009

Мы постоянно получаем эту ошибку в нашем веб-приложении.

System.Data.SqlClient.SqlException: A связанный с сетью или конкретный экземпляр произошла ошибка при установлении подключение к SQL Server. Сервер не был найден или не был доступен. Убедитесь, что имя экземпляра правильно и что SQL Server настроен для разрешения удаленного соединения. (поставщик: именованные трубы Поставщик, ошибка: 40 - Не удалось открыть подключение к SQL Server)

Это имело бы смысл, если бы мы когда-либо получали ошибку, но периодически ее выдвигать, предполагая, что происходит что-то еще.

Кто-нибудь испытывал это? Есть предложения или теории?

Спасибо!

Ответы [ 4 ]

6 голосов
/ 23 июня 2009

Возможно, сервер слишком занят, чтобы отвечать - вы используете SQL Express или Workgroup Edition? Кроме того, сколько подключений одновременно имеет этот сервер? Эта ошибка происходит на всех соединениях в определенное время, или некоторые соединения отклоняются, в то время как другие преуспевают одновременно?

Кроме того, если вы делаете "PING -t Servername" и смотрите его, каждый пинг возвращается или некоторые потеряны? Это может быть индикатором прерываний сети, которые также могут вызывать эту ошибку.

5 голосов
/ 23 июня 2009

У нас было это из-за слишком большого количества брандмауэров: чем дальше клиент (скажем, HK или NY, мы в Швейцарии), тем чаще это происходило. Лондон: редко. Швейцария: никогда. Нам объяснили (через нашу разработку БД и помощь MS), что задержки из-за маршрутизаторов и брандмауэров иногда расстраивают Kerberos и / или связанные с этим тайминги.

Исправлено: использовать порт в строке подключения. Это позволяет избежать приема туда и обратно к порту 1434 для перечисления экземпляра. Мы уже использовали FQDN.

Пример: server.domain.tld \ instance, порт

YNNV конечно, но у нас это сработало

4 голосов
/ 28 января 2010

У меня была точно такая же проблема; мы также получили это:

System.Data.SqlClient.SqlException: An при установлении произошла ошибка соединение с сервером. когда подключение к SQL Server 2005, это сбой может быть вызван тем, что в настройках по умолчанию SQL Server не разрешает удаленные подключения. (поставщик: поставщик именованных каналов, ошибка: 40 - не удалось открыть подключение к SQL Server)

и вот этот:

System.Data.SqlClient.SqlException: A произошла ошибка транспортного уровня при отправке запроса на сервер. (провайдер: провайдер TCP, ошибка: 0 - существующее соединение было принудительно закрывается удаленным хостом.)

Первый был особенно странным, поскольку мы не использовали именованные каналы.

Так или иначе, оказалось, что проблема в неисправном переключателе.

Я возился с устранением неполадок на уровне приложений и на уровне базы данных, прежде чем настроить запланированную задачу на PING туда-обратно между серверами приложений и базами данных (используя IP-адрес и имя серверов NETBIOS, если проблема была в netbios поиск имени).

Ошибки проверки связи возникали надежно одновременно с ошибками БД, поэтому мы знали, что это было сетевое оборудование, а не что-либо на более высоком уровне.

Замена коммутатора исправила все.

4 голосов
/ 23 июня 2009

Я видел это раньше, когда обращался к удаленному серверу в другом месте. Я подозревал, что это произошло из-за конфигурации маршрутизатора между двумя сайтами, так как он был, скажем так, грязным. Вполне возможно, что вы получаете его из-за конфигурации сети или плохого оборудования, но я бы не стал делать такой вывод, пока вы не исчерпали множество других возможностей.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...