Я пытаюсь отследить возможные причины того, что мое приложение не может подключиться к серверу БД.
У меня есть служба Windows, которая подключается к базе данных при запуске. Служба работает на машинах с надежным проводным сетевым подключением. Он устанавливается при запуске Automatic, поэтому обычно запускается, когда работает Windows, и почти во всех случаях это работает нормально.
Однако, с одним набором компьютеров XP (которые я не контролирую) соединение с базой данных завершается неудачно, когда служба запускается с запуском Windows. Возникает стандартное исключение:
System.Data.SqlClient.SqlException: An
при установлении произошла ошибка
соединение с сервером. когда
подключение к SQL Server 2005, это
сбой может быть вызван тем, что
в настройках по умолчанию SQL Server
не разрешает удаленные подключения.
(поставщик: Сетевые интерфейсы SQL,
ошибка: 26 - Ошибка определения местоположения
Указанный сервер / экземпляр)
На этих машинах, если пользователь вошел в систему и запускает службу вручную, он правильно подключается к базе данных, что довольно странно. Итак, я думаю, проблема при запуске Windows либо:
- Услуга запускается до подключения к сети
- Служба запускается до того, как машина сможет подключиться к DNS для разрешения имени сервера (если так разрешаются имена серверов БД)
- На компьютере существует политика / брандмауэр / и т. Д., Который изначально запрещает исходящие подключения
- что-то еще ...
Проблема не возникает, когда пользователь запускает службу вручную, поэтому что-то должно было произойти, чтобы решить проблему. Я предполагаю, что это либо процесс, который запускается при запуске, но не завершился, когда запускается моя служба, либо тот факт, что пользователь вошел в систему - возможно, что-то в их сценарии входа.
У меня нет прямого доступа к машинам, поэтому мне нужно составить хорошее представление о том, в чем может быть проблема, и определить, правильно ли это. Я не могу повторно развертывать диагностические программы, поэтому нужно быть тщательным с первого раза.
Итак, первый вопрос: кто-нибудь знает о политиках рабочего стола, сетевых политиках или программном обеспечении, которые могут вызвать эту ситуацию? Второй вопрос: что я могу сделать, чтобы точно диагностировать происходящее?
Я подумываю о создании новой диагностической службы, которая также будет установлена для автоматического запуска и будет выполнять различные действия, чтобы увидеть, что происходит, и записать эту информацию. например:
- запустите "ipconfig / all" (чтобы увидеть, есть ли сетевое соединение)
- ping сервера базы данных по IP-адресу (чтобы узнать, может ли он найти сервер)
- ping сервера базы данных по имени
- проверьте раздел реестра HKLM, который содержит имя сервера (в случае, если реестр HKLM позднее обновляется)
- создать sql-соединение с базой данных (чтобы узнать, когда это начнет работать)
- повторять эти шаги каждые несколько секунд.
У меня будет установлен этот сервис, перезапустите компьютер, затем через некоторое время войдите в систему пользователя. Диагностика должна показать некоторую полезную информацию ... но у кого-нибудь есть идея или дополнительные предложения?
Я также пытался изменить службу для запуска в качестве учетной записи пользователя с подходящими привилегиями, но это не решило проблему. Обратите внимание, что учетная запись Local System имеет достаточные привилегии для подключения к серверу базы данных, так как служба работает нормально при запуске вручную. так что это не то же самое, что этот вопрос .
ОБНОВЛЕНИЕ: проблемные машины работают под управлением Win XP.
ОБНОВЛЕНИЕ: эта статья дает хорошее обсуждение кода ошибки 26