我在将 .NET 5 Web 应用连接到 Azure SQL DB 时遇到问题。 奇怪的是我可以使用 Azure Data Studio 连接到数据库。
我已将 Azure SQL Server 防火墙配置为接受来 self 的 IP 地址以及 Azure 应用服务的所有入站/出站 IP 地址的连接。 在将本地 IP 地址添加到防火墙之前,我无法与 Azure Data Studio 连接,因此可以按预期工作,但随后我使用 Azure 本身提供的连接字符串(采用 ADO.NET 格式,因为我使用的是 Entity Framework ) )在我的 Web 应用程序中,并且该应用程序无法连接到数据库(它超时,建立与 SQL Server 的连接时发生网络相关或特定于实例的错误。未找到或未找到服务器可访问。验证实例名称是否正确,以及 SQL Server 是否配置为允许远程连接。(提供程序:TCP 提供程序,错误:40 - 无法打开到 SQL Server 的连接))。
我无法真正理解为什么我的本地主机实例无法连接,因为尝试连接到数据库的 IP 地址与我使用 Azure Data Studio 时相同! 而且 Azure 中的应用服务实例也无法连接(在 SQL Server 的防火墙中,我还启用了来自 Azure 应用服务的连接!!)。 连接字符串的形式为
服务器=tcp:[我的服务器].database.windows.net;初始目录=[我的数据库];持久安全信息=False;用户ID=[我的用户名];密码=[我的密码]; MultipleActiveResultSets=False;Encrypt=True;TrustServerCertificate=False;连接超时=30;
有什么提示吗?
编辑: 按要求重述,
- 本地运行的 dotnet 无法连接
- 容器化应用服务无法连接
- Azure Data Studio 在本地进行连接
我同时发现了这个问题,但我不明白原因:
- 从 WSL 运行 dotnet 不起作用;如果我从 Windows 运行该应用程序,它确实可以工作!!
- 因此,我将应用服务更改为从源代码构建,而不是运行容器化镜像,而且它也确实有效。
为什么从 WSL 而不是 Windows 本地运行应用程序会导致 Azure SQL Server 的防火墙阻止我?! WSL 是否暴露于具有不同 IP 地址的互联网?
为什么运行我的应用的容器化版本的 Azure 应用服务会发生同样的情况?
最佳答案
由于您可以从同一台计算机访问服务器,因此这不是防火墙问题。
您可以检查两种可能性:
- 您的程序使用的连接字符串不是您所期望的。尝试记录连接字符串。
- 服务器配置为使用命名管道而不是 TCP。 Azure Data Studio 配置为使用命名管道,因此可以正常工作。尝试检查服务器配置。
关于c# - C# 中的 Azure SQL DB 连接问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69699452/