来自 C# 的 Azure SQL DB 连接问题

Posted

技术标签:

【中文标题】来自 C# 的 Azure SQL DB 连接问题【英文标题】:Azure SQL DB connection issues from C# 【发布时间】: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地址可能不同? 您能否编辑您的问题并添加此信息,并请简化您的解释以解释哪些有效,哪些无效(即以表格形式) 【参考方案1】:

由于您可以从同一台机器访问服务器,这不是防火墙问题。

您可以检查两种可能性:

    您的程序使用的连接字符串不是您所期望的。尝试记录连接字符串。 服务器配置为使用命名管道而不是 tcp。 Azure Data Studio 配置为使用命名管道,因此可以正常工作。尝试检查服务器配置。

【讨论】:

以上是关于来自 C# 的 Azure SQL DB 连接问题的主要内容,如果未能解决你的问题,请参考以下文章

关于从 access db 到 Azure SQL 的 ODBC 连接

是否可以从 Azure SQL DB 连接 Azure SQL 托管实例?

为啥 Microsoft 不支持到 SQL Azure 的 OLE DB 连接?

如果 SQL Server 是 MS 2012,则从 Pyodbc 连接到 SQL 14 Azure db

用于使用 Azure SQL Server 数据的 C# Web API

Azure SQL 数据库 - 交叉引用 DB 查询 - SP