Проблемы с подключением к базе данных SQL Azure из C#

#c# #sql-server #azure #azure-web-app-service #azure-sql-database

Вопрос:

У меня возникли проблемы с подключением моего веб-приложения .NET 5 к базе данных SQL Azure. Странно то, что я могу подключиться к базе данных с помощью Azure Data Studio.

Я настроил брандмауэр SQL Server Azure для приема подключений с моего IP-адреса и всех входящих/исходящих IP-адресов службы приложений Azure. Перед добавлением мой локальный IP-адрес в брандмауэр, я не могла связаться с данных Azure студии, так что это работает как задумано, но затем я использую строку подключения, предоставляемые Azure (в ADO.NET формат, поскольку я использую рамки Entity) в моем веб-приложение, и приложение не может подключиться к БД (это раз с сеть-или относящиеся к экземпляру ошибка при подключении к SQL серверу. Сервер не был найден или был недоступен. Убедитесь, что имя экземпляра указано правильно и что SQL Server настроен на разрешение удаленных подключений. (поставщик: Поставщик TCP, ошибка: 40 — Не удалось открыть соединение с SQL Server)).

Я действительно не могу понять, почему мой экземпляр localhost не может подключиться, так как IP-адрес, по которому я пытаюсь подключиться к базе данных, такой же, как при использовании Azure Data Studio! А также экземпляр службы приложений в Azure также не может подключиться (в брандмауэре SQL Server я также включил подключение из служб приложений Azure!!). Строка подключения имеет вид

Сервер=tcp:[мой сервер].database.windows.net;Начальный каталог=[моя база данных];Сохраняемая информация о безопасности=Ложь;Идентификатор пользователя=[мое имя пользователя];Пароль=[мой пароль];Наборы параметров Multipleactiveresult=Ложь;Шифрование=Истина;Сертификат доверия=Ложь;Время ожидания подключения=30;

Есть какие-нибудь намеки?

ИЗМЕНИТЬ: чтобы резюмировать по запросу,

  • локальная сеть dotnet не подключается
  • контейнерная служба приложений не подключается
  • Azure Data Studio локально подключается

Тем временем я выяснил проблему, но я не понимаю причины:

  • запуск dotnet из WSL не работает; если я запускаю приложение из Windows, оно работает!!
  • Поэтому я изменил службу приложений на сборку из исходного кода вместо запуска контейнерного изображения, и это также работает.

Почему запуск приложения локально из WSL вместо Windows приведет к тому, что брандмауэр SQL Server Azure заблокирует меня?! Доступен ли WSL в Интернете с другим IP-адресом?

И почему то же самое происходит со службой приложений Azure, которая запускает контейнеризованную версию моего приложения?

Комментарии:

1. Итак, вы запускаете веб-приложение в IIS, которое расположено на той же машине, что и та, которую вы используете для подключения к Azure Data Studio?

2. На самом деле я не использую IIS, это приложение .NET 5 (скажем, ядро), которое работает как простое консольное приложение. На самом деле, я только что узнал, что запуск приложения из Windows работает, но не в том случае, если я запускаю приложение из WSL! Теперь, имея это в виду, мне нужно выяснить, почему та же проблема возникает с контейнерной службой приложений в Azure.

3. Контейнерный, вероятно, имеет другой IP-адрес?

4. Можете ли вы отредактировать свой вопрос и добавить эту информацию, а также, пожалуйста, упростить свое объяснение, чтобы объяснить, что работает, а что нет (т. Е. в табличной форме)

Ответ №1:

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

Есть две возможности, которые вы могли бы проверить:

  1. Строка подключения, которую использует ваша программа, не соответствует вашим ожиданиям. Попробуйте ввести строку подключения в журнал.
  2. Сервер настроен на использование именованных каналов, а не tcp. Среда Azure Data Studio настроена на использование именованных каналов и поэтому работает. Попробуйте проверить конфигурацию сервера.