Почему я должен получать эту ошибку с перерывами? "Сервер не найден или не был доступен"

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

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

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

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

Спасибо!

Ответ 1

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

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

Ответ 2

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

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

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

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

Ответ 3

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

Ответ 4

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

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

и этот:

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

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

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

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

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

Замена переключателя исправлена.