c# - C# 中的 Azure SQL DB 连接问题

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

我在将 .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 应用服务会发生同样的情况?

最佳答案

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

您可以检查两种可能性:

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

关于c# - C# 中的 Azure SQL DB 连接问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69699452/

相关文章:

azure - 在 Azure 中创建存储帐户时出现 403 错误

c# - 如何估计要从 NetworkStream 读取的字节数组/缓冲区的大小?

sql - 使用存储过程在同一数据库中以一种方式同步两个表

c# - 从 Azure Active Directory 获取个人资料图片

sql - 存储过程的表值参数可以有默认值吗

sql - 如何在 SQL 中将 GPS 格式的时间转换为本地时间格式?

c# - HttpClient 调用受 Azure AD 保护的站点

c# - 使用 .Net Core 的 T4 参数指令

c# - 从 jQuery/JavaScript/AJAX 检索值以添加到数据库 (ASP.NET/C#)

c# - 以编程方式将pdf转换为word