【发布时间】:2021-07-24 11:59:07
【问题描述】:
我有两个运行连接到 Azure SQL 数据库的 .NET Core 3.1 应用程序的应用程序服务。一个应用程序是一个简单的测试应用程序,用于使用相同的 DI 管道测试与数据库的连接性,另一个是完整的应用程序。测试应用程序连接到数据库并产生所需的输出,而生产应用程序无法连接并出现以下异常消息:
在建立与 SQL Server 的连接时发生与网络相关或特定于实例的错误。服务器未找到或无法访问。验证实例名称是否正确以及 SQL Server 是否配置为允许远程连接。 (提供者:SNI_PN11,错误:26 - 错误定位服务器/指定的实例)
我已修改数据库的规则以包括我的开发工作站 IP 地址,并且两个应用程序都按预期连接到数据库。在数据库防火墙上,我还做了以下工作:
- 将测试和生产应用程序的 IP 地址添加到数据库防火墙。它是在应用服务的属性部分中指定为
virtual ip address的 IP 地址。这两个应用服务共享一个虚拟 IP 地址。 - 在控制台中启用了
Allow Azure services and resources to access this server设置。
应用程序的appsettings.json 文件完全相同。
当我将测试应用部署到生产服务器时,它仍然可以工作。生产应用程序中的某些内容导致连接失败。为什么生产应用无法连接?还有什么办法可以解决问题?
【问题讨论】:
-
您需要允许
Additional Outbound IP Addresses- 如果您使用没有 VNet 集成的应用服务,那么它可以使用这些 IP 地址中的任何一个。你永远不知道是哪一个 ;) -
@CarlosGarcia 感谢您的建议,听起来我需要设置一个虚拟网络。我原以为允许来自 Azure 的连接会处理额外的出站 IP 地址。大概有20个!为每个需要数据库的应用程序服务添加所有这些不是一个可接受的解决方案。
-
我认为这也应该有效。当您转到“属性”时,
Virtual IP address是入站地址。正在使用的出站地址是Outbound IP addresses,而Additional是在发生任何事情时可以使用的其他IP 地址(例如更新主机)。如果要使用 VNet,则必须使用VNet integration,因为这些是出站连接。如果它不起作用,请告诉我 -
感谢@CarlosGarcia 的帮助,我发现问题是配置错误,直到我添加了一些更详细的日志记录才发现。
-
有道理。大多数出现这些错误的人是连接字符串中的拼写错误:) 如果没有,请查看托管服务标识,它可以简化一些事情
标签: asp.net azure asp.net-core azure-web-app-service