Azure 上的 .NET Core 无法连接到 SQL Server 数据库

Posted

技术标签:

【中文标题】Azure 上的 .NET Core 无法连接到 SQL Server 数据库【英文标题】:.NET Core on Azure can't connect to SQL Server Database 【发布时间】:2020-08-21 22:29:36 【问题描述】:

我有一个在 Azure 上发布的 .NET Core API 后端。我还有一个在 Azure 上运行的 SQL Server 数据库,如果我在本地运行我的后端应用程序,它会成功连接到 online 数据库,读/写等工作正常。但是,在运行在线后端时,每个 API 调用都会导致 500 错误。查看日志时出现以下错误,可能导致 500:

Microsoft.Data.SqlClient.SqlException (0x80131904):建立与 SQL Server 的连接时发生与网络相关或特定于实例的错误。服务器未找到或无法访问。验证实例名称是否正确以及 SQL Server 是否配置为允许远程连接。 (提供者:命名管道提供者,错误:40 - 无法打开与 SQL Server 的连接)

因此,出于某种原因,托管在 Azure 上的后端无法访问此数据库。在我的在线数据库的 Azure 门户中,我已将后端的 IP 添加到防火墙异常中,并选中了“允许远程 Azure 连接到服务器”。

TLDR;在本地一切正常,在 Azure 上发布的版本无法连接/查找数据库。

编辑:已解决,感谢所有评论的人。 (特别感谢 Jason!) 解决方案是使用以下格式的连接字符串:

Data Source=tcp:servername.database.windows.net,1433;Initial Catalog=db;Persist Security Info=False;User ID=user;Password=mypassword;MultipleActiveResultSets=False;Encrypt=True;TrustServerCertificate=False;Connection Timeout=30;

【问题讨论】:

您将应用发布到哪个 Azure 服务?您是在 Azure VM 中运行 SQL Server 还是使用 Azure SQL 数据库?您的 SQL Server(两种情况)是使用公共 IP 端点还是私有 IP 端点部署的? @DavidBrowne-Microsoft 我通过在 VS > Publish> Web Deploy 中单击我的解决方案来发布它。我使用的数据库托管在 Azure 上。我也尝试在 Azure VM 中使用数据库,但这给出了同样的错误。我不太明白你最后一个问题的意思?我可以连接到 SSMS 中的两个数据库。 我已经更新了我的答案,还提供了另一个关于如何在门户中配置Connection strings 的文档。希望对你有用。 当你使用 `VS > Publish> Web Deploy.`... 你把它部署到哪里了?您是否将其部署到 Azure 应用服务? “允许 Azure”应该允许它连接。你说 我的后端 IP 到防火墙异常。你是如何确定这个IP的?目前还不清楚你的后端在哪里。对于 Azure 中的许多服务,IP 地址会发生变化。 那么您最初使用的只能在本地运行的连接字符串是什么? 【参考方案1】:

更新

我按照教程操作,详细步骤见截图。 The official documentation 包含示例代码,您可以下载查看。我将我的 conn 字符串放入我的代码中。

如果你在 web.config 或其他文件中配置你的连接字符串,你可以看到this document。你可以在你的门户中配置它。

Step 1. 修改代码中的连接字符串,并添加一个接口进行测试。

第 2 步。为 peoject 创建一个待办事项表。 [确保你已经完成Firewall setting]

第 3 步。在本地测试然后部署。可以看到我的项目运行成功,界面可以使用了。

私人

你可以去你的 sqldb 找到Connection strings 并复制那里提供的那个。

此字符串的格式为:

Data Source=tcp:servername.database.windows.net,1433;Initial Catalog=db;
Persist Security Info=False;
User ID=user;Password=mypassword;
MultipleActiveResultSets=False;Encrypt=True;TrustServerCertificate=False;
Connection Timeout=30;

还有a post 也有同样的问题。更多详情,你可以阅读。

【讨论】:

非常感谢您的回答和付出的努力。我通过从“连接字符串”复制字符串并将其设置为我的门户中的连接字符串解决了我的问题,然后在我的 c# 代码中使用它,如下所示:services.AddDbContext<TodoContext>(options =>options.UseSqlServer(Environment.GetEnvironmentVariable("SQLAZURECONNSTR_nameOfMyConnString")));

以上是关于Azure 上的 .NET Core 无法连接到 SQL Server 数据库的主要内容,如果未能解决你的问题,请参考以下文章

azure ubuntu 16.04 VM 无法连接到 azure 上的数据库

.NET Core - 能够连接到 Azure App Config 但不能返回任何配置值?

将 .NET Core 桌面应用程序连接到 Azure SQL Server 的最佳方式是啥

Node 在连接到 Postgres 方面比 .NET Core 快 20 倍

从 Windows Azure 上的 .NET 应用程序连接到 ***?

在 Azure 中为 ASP.NET Core Web 应用设置 SQL 连接字符串