【发布时间】:2021-12-10 10:20:13
【问题描述】:
我在将 .NET 5 Web 应用程序连接到 Azure SQL DB 时遇到问题。 奇怪的是我可以使用 Azure Data Studio 连接到数据库。
我已将 Azure SQL Server 防火墙配置为接受来自我的 IP 地址的连接,以及我的 Azure 应用服务的所有入站/出站 IP 地址。 在将本地 IP 地址添加到防火墙之前,我无法连接 Azure Data Studio,因此可以按预期工作,但随后我使用 Azure 本身提供的连接字符串(采用 ADO.NET 格式,因为我使用的是实体框架)在我的网络应用程序中,并且该应用程序无法连接到数据库(它超时 在建立与 SQL Server 的连接时发生与网络相关或特定于实例的错误。未找到或未找到服务器可访问。验证实例名称是否正确以及 SQL Server 是否配置为允许远程连接。(提供程序:TCP 提供程序,错误:40 - 无法打开与 SQL Server 的连接))。
我真的不明白为什么我的 localhost 实例无法连接,因为尝试连接到数据库的 IP 地址与我使用 Azure Data Studio 时相同! Azure 中的应用服务实例也无法连接(在 SQL Server 的防火墙中,我还启用了来自 Azure 应用服务的连接!!)。 连接字符串的格式为
Server=tcp:[my server].database.windows.net;Initial Catalog=[my db];Persist Security Info=False;User ID=[my username];Password=[my password]; MultipleActiveResultSets=False;Encrypt=True;TrustServerCertificate=False;Connection Timeout=30;
有什么提示吗?
编辑: 按要求重述,
- 在本地运行的 dotnet 无法连接
- 容器化应用服务未连接
- Azure Data Studio 本地连接
我在此期间发现了问题,但我不明白原因:
- 从 WSL 运行 dotnet 不起作用;如果我从 Windows 运行应用程序,它确实可以工作!
- 因此,我将应用服务更改为从源代码构建,而不是运行容器化映像,而且它也可以正常工作。
为什么从 WSL 而不是 Windows 在本地运行应用程序会导致 Azure SQL Server 的防火墙阻止我?! WSL 是否通过不同的 IP 地址暴露于互联网?
为什么运行容器化版本的应用程序的 Azure 应用程序服务会发生同样的情况?
【问题讨论】:
-
那么您是在 IIS 上运行 Web 应用程序,而该应用程序与您用于连接 Azure Data Studio 的计算机位于同一台计算机上?
-
我实际上并没有使用 IIS,它是一个 .NET 5(假设是核心)应用程序,它作为一个简单的控制台应用程序运行。实际上,我刚刚发现从 Windows 运行应用程序是可行的,但如果我从 WSL 运行应用程序则不行!现在考虑到这一点,我需要找出为什么 Azure 上的容器化应用服务会出现同样的问题。
-
容器化的IP地址可能不同?
-
您能否编辑您的问题并添加此信息,并请简化您的解释以解释哪些有效,哪些无效(即以表格形式)
标签: c# sql-server azure azure-web-app-service azure-sql-database