Основное приложение Dotnet не может подключиться к SQL-серверу с помощью IIS, только при использовании IIS Express или Kestrel.

У меня есть веб-приложение .NET Core, которое извлекает некоторые данные с SQL Server. Я подключаюсь к SQL Server через Интернет.

Когда я запускаю приложение с IIS Express или Kestrel, я могу подключиться к серверу базы данных и получить данные. Я также могу успешно подключиться к серверу базы данных с помощью SQL Server Management Studio.

Вот строка подключения, которую я использую:

"ConnectionStrings": {
    "DefaultConnection": "Server=my-sql-server.someurl.com; Initial Catalog=my-sql-database; User ID=my-user-id; Password=my-password;"
}

Но когда я пытаюсь запустить тот же веб-сайт на том же компьютере в IIS, я получаю следующее сообщение об ошибке:

SqlException: ошибка, связанная с сетью или конкретным экземпляром, при установке соединения с SQL Server. Сервер не найден или не был доступен. Убедитесь, что имя экземпляра правильное и что SQL Server настроен на разрешение удаленных подключений. (поставщик: поставщик TCP, ошибка: 0 - такой хост не известен.)

Я подозреваю, что это как-то связано с комбинацией ядра dotnet / IIS, а не с проблемой брандмауэра / сети / аутентификации, но я могу ошибаться.


person Bjarte Aune Olsen    schedule 10.04.2018    source источник
comment
Пожалуйста, проверьте, ограничен ли ваш IP сервером?   -  person Aay Que    schedule 10.04.2018
comment
Работает ли он на той же машине, где не работает полный IIS? my-sql-server.somedomain.com это машина интрасети / активного каталога или вы пытаетесь получить к ней доступ через общедоступный Интернет?   -  person Alex K.    schedule 10.04.2018
comment
Я тестирую на той же машине: я могу подключиться с помощью IIS Express / Kestrel, я не могу подключиться с помощью IIS. Я подключаюсь к серверу SQL через общедоступный Интернет, я не нахожусь в той же сети. Я не могу проверить, ограничивает ли SQL-сервер мой IP-адрес, но нет причин верить в это, поскольку я могу подключиться к нему любым другим способом, кроме IIS.   -  person Bjarte Aune Olsen    schedule 10.04.2018
comment
Возможно, отключите брандмауэр Windows и посмотрите, имеет ли это значение. (Наличие общедоступного SQL Server кажется действительно плохой идеей, вместо этого обычно используется VPN)   -  person Alex K.    schedule 10.04.2018
comment
Пытался отключить брандмауэр, не помогло. Кстати, большое спасибо за предложения, я очень ценю вашу помощь.   -  person Bjarte Aune Olsen    schedule 10.04.2018


Ответы (3)


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

У меня есть appsettings.json, содержащий одну строку подключения, и appsettings.Production.json, содержащий другую.

При запуске приложения с IIS Express или Kestrel используется первый, но когда я публикую приложение, а затем запускаю его в IIS, для среды устанавливается значение «Производство», и вместо этого используются производственные параметры.

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

person Bjarte Aune Olsen    schedule 24.04.2018

Я решил эту проблему, добавив LocalSystem в Identity на веб-сайте Пул приложений.

Шаги:

  1. Выбрать пул приложений веб-сайта
  2. Щелкните правой кнопкой мыши и выберите Дополнительные настройки.
  3. Нажмите "Удостоверение" и измените его на LocalSystem.
person Faraz Ahmed    schedule 17.04.2019
comment
взять подсказку из этого URL-адреса syncfusion.com/kb/6897/ - person Faraz Ahmed; 17.04.2019

Вам необходимо включить протокол TCP / IP на сервере sql. Используйте следующую ссылку: Почему я получаю сообщение «Невозможно подключиться к серверу - ошибка, связанная с сетью или конкретным экземпляром»?

person mukesh joshi    schedule 17.04.2018
comment
Спасибо за совет, но у меня нет такого доступа к SQL-серверу. Поскольку я могу подключиться к серверу SQL с помощью IIS Express и не использовать IIS, я подозреваю, что проблема как-то связана с комбинацией ядра dotnet, ядра EF и IIS. - person Bjarte Aune Olsen; 18.04.2018