【发布时间】: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 地址会发生变化。
-
那么您最初使用的只能在本地运行的连接字符串是什么?
标签: sql-server azure .net-core