У SQL Server 2005 возникли проблемы с подключением к веб-сайту, работающему на том же сервере
-
09-06-2019 - |
Вопрос
При установлении соединения с сервером произошла ошибка.При подключении к SQL Server 2005 этот сбой может быть вызван тем фактом, что в настройках по умолчанию SQL Server не разрешает удаленные подключения.(поставщик услуг:Поставщик Именованных каналов, ошибка:40 - Не удалось открыть соединение с SQL Server)
Здравствуйте, я новичок в разработке на SQL Server 2005.Я несколько лет работал с SQL Server 2000, но после выполнения обычных действий, которые я делаю для подключения к серверу, я получаю это исключение на веб-сервере.
В Google есть несколько ссылок, которые указывают мне на возможные решения, но ни одна из них не решила мою проблему.Я внес изменения в диалоговое окно "Площадь поверхности какая угодно ..." (Что это, черт возьми, такое???Почему SQL Server так сильно изменился???Сейчас это кажется таким сложным).
Я убедился, что SQL Server 2005 настроен должным образом, чтобы разрешать входящие подключения к экземпляру сервера базы данных.Я также выбрал Автоматический в качестве типа запуска используется автоматический запуск службы браузера SQL Server при каждом запуске системы.И нет, брандмауэр не запущен.
Я пытался изменить строку подключения для подключения с использованием порта, для подключения с использованием IP, для подключения с использованием имени экземпляра...
Кажется, ничего не работает, я все еще получаю ту же ошибку.Есть какой-нибудь намек?
Отвечая на вопросы, которые задали люди:Да, я могу подключиться с помощью Management Studio с другого компьютера.Да, я уверен, что он настроен на прием локальных и удаленных протоколов TCP / IP и именованных каналов.Да, я перезапустил сервер.
Я использую безопасность в смешанном режиме, который я уже включил.Я уже включил пользователя sa.Я могу подключиться к базе данных, используя файл .udl, и я проверил, что моя строка подключения в порядке.Я могу подключиться к базе данных с помощью клиентских инструментов DBArtisan и SQL Server.Я могу сделать это как на сервере, так и на другом компьютере.Даже несмотря на все это...
Веб-сайт по-прежнему не может подключиться.
Новое обновление...Я весь день боролся с этой проблемой и до сих пор не выяснил причину.Похоже, что сообщение об ошибке, которое я опубликовал, является общей ошибкой, которую выдает .net, когда не удается подключиться.Я поместил мусор в строку подключения (введя несуществующие серверы), и я все еще получаю ту же ошибку.
Вот некоторые из строк подключения, которые я использовал на сервере:
ConnectionString="Интегрированная безопасность=SSPI;Источник данных= СЕРВЕР;Начальный каталог= база данных;Сетевая библиотека=DBMSSOCN;"
ConnectionString="Источник данных= СЕРВЕР;Начальный каталог= база данных;Идентификатор пользователя=sa;Пароль=xxxxx;"
ConnectionString="Источник данных=СЕРВЕР\MSSQLSERVER;Начальный каталог= база данных;Идентификатор пользователя=sa;Пароль=xxxxx;"
Я попытался зарегистрировать экземпляр sql server с помощью какой-то странной команды, я нашел это здесь:http://kb.discountasp.net/article.aspx?id=1041 Для этого я использовал инструмент aspnet_regsql.exe.Это все еще не работает...
Я также знаю, что на сервере установлена последняя версия MDAC.Единственное, что вызывает у меня подозрения, это то, что на сервере есть два ядра баз данных:СЕРВЕР и server\sqlexpress
Имеет ли это какое-то отношение к проблеме?
Решение 9
Я исправил проблему, которая возникла у меня с подключением.Проблема была в моем приложении.Причиной проблемы было то, что строка подключения к базе данных разработки (вместо производственной) была жестко запрограммирована одним из диалоговых окон, генерирующих наборы данных.Это диалоговое окно поместило строку подключения как в web.config, так и в скрытый файл исходного кода под названием "Settings.настройки.cs".Проблема была решена путем фиксации строки подключения в правильном месте.
Сообщение об ошибке полностью вводило в заблуждение, но я смог обнаружить это, следуя всем методам, представленным в трассировке стека.
Так что, если вы когда-нибудь обнаружите это сообщение об ошибке, существует масса возможных причин.Ваша первая ставка - выполнить обычные действия при возникновении этой ошибки, которые заключаются в проверке того, что сервер разрешает удаленные и локальные подключения, и перезапуске службы браузера.
Если это не сработает, проверьте трассировку стека, найдите код, который есть в вашем приложении, поставьте там точку останова и изучите все свойства строки подключения.По крайней мере, так я это решил.
Другие советы
Единственное, что вызывает у меня подозрения, это то, что на сервере есть два ядра баз данных:СЕРВЕР и server\sqlexpress
Я думаю, что это и есть источник проблемы.К какому из них вы намерены подключиться?Вам необходимо указать "экземпляр", к которому вы подключаетесь.
Предполагая, что вы собираетесь подключиться к экземпляру СЕРВЕРА, ваша строка подключения должна выглядеть следующим образом (при условии использования имени экземпляра по умолчанию):
Источник данных=ВАШ СЕРВЕР\MSSQLSERVER;Начальный каталог= база данных;Идентификатор пользователя=sa;Пароль=xxxxx;
Или для sql express строка подключения выглядит следующим образом:Источник данных=ВАШ СЕРВЕР\sqlexpress;Начальный каталог= база данных;Идентификатор пользователя=sa;Пароль=xxxxx;
Можете ли вы подключиться к SQL Server через Management Studio с другого компьютера?Это может помочь вам сузить круг вопросов, идет ли речь о конфигурации SQL Server или о вашей конфигурации строки подключения.
Еще раз проверьте конфигурацию surface area и убедитесь, что разрешены подключения по протоколу TCP / IP.
Это может быть что угодно.Первое, что я бы проверил, это убедиться, что вы можете подключиться к серверу с помощью SQL Server Management Studio.Во-вторых, проверьте строку подключения, чтобы убедиться в ее правильности.Конфигурация площади поверхности не должна применяться для локальных подключений.
Попробуйте переустановить последнюю версию MDAC на сервере.Однажды у меня была похожая проблема, и это решило ее.
Судя по ошибке, похоже, что код пытается подключиться, используя именованные каналы, а не TCPIP.Возможно, вам действительно потребуется специально указать в вашей строке подключения, что поставщик sql должен подключаться с использованием tcpip, чтобы ваша строка подключения выглядела следующим образом.
Использование встроенной аутентификации (Windows):
Интегрированная безопасность=SSPI;Источник данных=ИМЯ СЕРВЕРА;Первоначальный каталог=ИМЯ БАЗЫ ДАННЫХ; Сетевая библиотека=DBMSSOCN;
Использование проверки подлинности SQL:
ЖИДКОСТЬ=Имя пользователя;ПВД=Пароль;Источник данных=ИМЯ СЕРВЕРА;Первоначальный каталог=ИМЯ БАЗЫ ДАННЫХ; Сетевая библиотека=DBMSSOCN;
Я видел что-то похожее на это раньше, когда по какой-то причине "именованные каналы" используются по умолчанию в качестве уровня транспорта / подключения, тем более что и веб-приложение, и sql server запущены на одном компьютере.Обычно я всегда использую tcpip в качестве транспортной или сетевой библиотеки.
Другим методом устранения неполадок является использование UDL (или файла канала передачи данных) для устранения неполадок в соединении.Это позволяет вам переключаться между поставщиками соединений (ODBC, OLEDB и т.д.) И устанавливать другие параметры подключения.
- На рабочем столе аппарата щелкните правой кнопкой мыши и выберите создать -> текстовый документ.
- Переименуйте файл *.txt в TestConnect.udl (имя не имеет значения, просто должно быть расширением .udl).Вы должны увидеть, как значок меняется со значка текстового файла на значок, который показывает компьютер поверх таблицы данных, или что-то в этом роде (другими словами, в Windows должен быть значок для этого.).
- Теперь дважды щелкните файл, и вы увидите появившийся апплет "Свойства канала передачи данных".
- Перейдите на вкладку Провайдер, и вы увидите список различных поставщиков подключения.Я бы начал с простого выбора "Microsoft OLE DB Provider для SQL Server".Мы можем использовать это, чтобы подтвердить, что OLE DB может подключаться или нет.
- Нажмите кнопку Далее и введите имя сервера или IP-адрес.Выберите интегрированную систему безопасности Windows NT.(Вы всегда можете вернуться и изменить его, чтобы использовать логин sql.) На этом этапе вы можете нажать "Проверить подключение".Если подключение пройдет успешно, выберите имя базы данных из выпадающего списка.
- Наконец, если соединение не удается установить, выберите вкладку "Все", а затем найдите "Сетевая библиотека" и отредактируйте ее значение, установив его равным "DBMSSOCN".
- Вернитесь на вкладку подключение и снова нажмите "проверить подключение".
- Повторите шаги 4 и 5, на этот раз выбрав "Собственный клиент SQL".
Надеюсь, это поможет.
По подсказке делает:
osql -E -S
...получить вам> подсказку ?
Вы пробовали указывать имя экземпляра в строке подключения?По-видимому, sql server express, в частности, привередлив в отношении наличия имени экземпляра.
Я также начал копаться в диспетчере конфигурации SQL Server.Итак, вы нажали на "Сетевая конфигурация SQL Server 2005", а затем посмотрели "Протоколы для Имя экземпляра"?И вы включили TCP / IP и именованные каналы?
Вы также смотрели на "Конфигурацию собственного клиента SQL" -> "Клиентские протоколы", и вы видите, что TCP / IP и именованные каналы там также включены?
Используя инструмент настройки поверхностной области SQL Server 2005, щелкните "Конфигурация поверхностной области для служб и подключений", затем в разделе "Компонент Database Engine" -> "Удаленные подключения", что выбрано?Поскольку кажется, что вы пытаетесь подключиться с использованием именованных каналов, вам нужно будет убедиться, что выбраны "Локальные и удаленные подключения" и "использование как tcp / ip, так и именованных каналов".
Как вы, вероятно, знаете, после внесения любых изменений вам необходимо остановить и перезапустить экземпляр sql server через Management Studio (вам не нужно перезагружать весь компьютер, хотя перезагрузка всего компьютера приведет вас к этому).
И мой последний совет.Отойдите от этого на некоторое время и отвлекитесь от своих мыслей на несколько минут.Когда вы снова погрузитесь в процесс, вы можете обнаружить что-то, что упустили или упустили из виду раньше.