繁体   English   中英

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

[英]Azure SQL DB connection issues from C#

我在将 .NET 5 Web 应用程序连接到 Azure SQL DB 时遇到问题。 奇怪的是我可以使用 Azure Data Studio 连接到数据库。

我已将 Azure SQL Server 防火墙配置为接受来自我的 IP 地址以及 Azure 应用服务的所有入站/出站 IP 地址的连接。 在将本地 IP 地址添加到防火墙之前,我无法与 Azure Data Studio 连接,因此按预期工作,但随后我使用了 Azure 本身提供的连接字符串(采用 ADO.NET 格式,因为我使用的是实体框架) ) 在我的 Web 应用程序中,并且该应用程序无法连接到数据库(在与SQL Server 建立连接时发生网络相关或特定于实例的错误而超时。找不到服务器或无法访问服务器。验证实例名称正确并且 SQL Server 配置为允许远程连接。(提供程序:TCP 提供程序,错误:40 - 无法打开到 SQL Server 的连接) )。

我真的不明白为什么我的 localhost 实例无法连接,因为尝试连接到数据库的 IP 地址与我使用 Azure Data Studio 时的 IP 地址相同! 而且 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;连接超时=30;

任何提示?

编辑:按要求回顾,

  • dotnet 在本地运行无法连接
  • 容器化应用服务无法连接
  • Azure Data Studio 本地连接

我在此期间发现了问题,但我不明白原因:

  • 从 WSL 运行的 dotnet 不起作用; 如果我从 Windows 运行该应用程序,它确实可以工作!!
  • 因此,我将应用服务更改为从源代码构建,而不是运行容器化映像,而且它也确实有效。

为什么从 WSL 而不是 Windows 本地运行应用程序会导致 Azure SQL Server 的防火墙阻止我?! WSL 是否使用不同的 IP 地址暴露给 Internet?

为什么运行我的应用程序容器化版本的 Azure 应用服务会发生同样的情况?

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

您可以检查两种可能性:

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

错误:40 - 无法打开与 SQL Server 的连接)。

  • 在大多数情况下,发生此错误是因为 SQL Server 服务已停止。
  • 如果您将 SQL Server Express 与高级服务或命名实例一起使用,并且报表服务器数据库的报表服务器 URL 或连接字符串不正确,则会发生此错误。

要解决这些问题:

  • 验证 SQL Server ( MSSQLSERVER ) 服务是否已启动。
  • 确保在应用程序服务器上启用 TCP/IP 作为客户端协议。
  • 尝试增加连接超时值。 我们建议使用至少 30 秒的连接超时。
  • 在控制面板中搜索服务,这将显示一个包含系统中所有服务的窗口,找到您的服务SQLEXPRESS并单击开始 它应该启动您的服务器实例。
  • 如果它已经在开始。 只需停止启动或简单地重新启动它。

在此处输入图片说明

转到 SQL Server 配置管理器 --> SQL Server 网络配置 --> MSSQLSERVER 的协议 在右窗格拆分页中,您必须禁用

  • 共享内存 - 启用
  • 命名管道 - 启用
  • TCP/IP - 启用

请参阅连接错误连接到 SQL Server 的疑难解答已知问题错误:40SO

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM