У SQL Server 2005 возникли проблемы с подключением к веб-сайту, работающему на том же сервере

StackOverflow https://stackoverflow.com/questions/63875

Вопрос

При установлении соединения с сервером произошла ошибка.При подключении к 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 на сервере.Однажды у меня была похожая проблема, и это решило ее.

[http://www.microsoft.com/downloads/details.aspx?familyid=6c050fe3-c795-4b7d-b037-185d0506396c&displaylang=en][1]

Судя по ошибке, похоже, что код пытается подключиться, используя именованные каналы, а не TCPIP.Возможно, вам действительно потребуется специально указать в вашей строке подключения, что поставщик sql должен подключаться с использованием tcpip, чтобы ваша строка подключения выглядела следующим образом.

Использование встроенной аутентификации (Windows):

Интегрированная безопасность=SSPI;Источник данных=ИМЯ СЕРВЕРА;Первоначальный каталог=ИМЯ БАЗЫ ДАННЫХ; Сетевая библиотека=DBMSSOCN;

Использование проверки подлинности SQL:

ЖИДКОСТЬ=Имя пользователя;ПВД=Пароль;Источник данных=ИМЯ СЕРВЕРА;Первоначальный каталог=ИМЯ БАЗЫ ДАННЫХ; Сетевая библиотека=DBMSSOCN;

Я видел что-то похожее на это раньше, когда по какой-то причине "именованные каналы" используются по умолчанию в качестве уровня транспорта / подключения, тем более что и веб-приложение, и sql server запущены на одном компьютере.Обычно я всегда использую tcpip в качестве транспортной или сетевой библиотеки.

Другим методом устранения неполадок является использование UDL (или файла канала передачи данных) для устранения неполадок в соединении.Это позволяет вам переключаться между поставщиками соединений (ODBC, OLEDB и т.д.) И устанавливать другие параметры подключения.

  1. На рабочем столе аппарата щелкните правой кнопкой мыши и выберите создать -> текстовый документ.
  2. Переименуйте файл *.txt в TestConnect.udl (имя не имеет значения, просто должно быть расширением .udl).Вы должны увидеть, как значок меняется со значка текстового файла на значок, который показывает компьютер поверх таблицы данных, или что-то в этом роде (другими словами, в Windows должен быть значок для этого.).
  3. Теперь дважды щелкните файл, и вы увидите появившийся апплет "Свойства канала передачи данных".
  4. Перейдите на вкладку Провайдер, и вы увидите список различных поставщиков подключения.Я бы начал с простого выбора "Microsoft OLE DB Provider для SQL Server".Мы можем использовать это, чтобы подтвердить, что OLE DB может подключаться или нет.
  5. Нажмите кнопку Далее и введите имя сервера или IP-адрес.Выберите интегрированную систему безопасности Windows NT.(Вы всегда можете вернуться и изменить его, чтобы использовать логин sql.) На этом этапе вы можете нажать "Проверить подключение".Если подключение пройдет успешно, выберите имя базы данных из выпадающего списка.
  6. Наконец, если соединение не удается установить, выберите вкладку "Все", а затем найдите "Сетевая библиотека" и отредактируйте ее значение, установив его равным "DBMSSOCN".
  7. Вернитесь на вкладку подключение и снова нажмите "проверить подключение".
  8. Повторите шаги 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 (вам не нужно перезагружать весь компьютер, хотя перезагрузка всего компьютера приведет вас к этому).

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top