#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:
Поскольку вы можете получить доступ к серверу с одной и той же машины, это не проблема брандмауэра.
Есть две возможности, которые вы могли бы проверить:
- Строка подключения, которую использует ваша программа, не соответствует вашим ожиданиям. Попробуйте ввести строку подключения в журнал.
- Сервер настроен на использование именованных каналов, а не tcp. Среда Azure Data Studio настроена на использование именованных каналов и поэтому работает. Попробуйте проверить конфигурацию сервера.