从 Azure Web 应用程序连接到内部 SQL 数据库

Connect to Internal SQL database from Azure Web Application

我正在尝试构建一个与 SQL 数据库对话的网络服务,该数据库托管在我们内部网络中的服务器上。该服务作为 Web 应用程序由 Azure 托管。有这样做的好方法吗?我是否必须使用 Azure Sql 数据库,如果我这样做,是否有办法让 Azure 数据库充当我们内部数据库的代理?

已经有规则允许连接到我们数据库服务器上的端口,所以我认为这不是问题所在。我看到很多关于连接到 Azure 托管 sql 数据库的问题,但没有关于将 Azure Web 应用程序连接到其他类型的数据库的问题。

当我尝试调用存储过程(通过生成的 entity framework 代码)时出现错误,如下所示:

发生错误:System.Data.Entity.Core.EntityException:底层提供程序打开失败。 ---> System.Data.SqlClient.SqlException:建立与 SQL 服务器的连接时发生了与网络相关或特定于实例的错误。服务器未找到或无法访问。验证实例名称是否正确并且 SQL 服务器配置为允许远程连接。

我们的数据库配置为允许远程连接,因此我猜测 Web 应用程序难以连接到我们的 vpn。

如果您需要任何其他信息,请告诉我。

谢谢,

乔什

您可以利用应用服务的一项功能 Azure 混合连接。在应用服务中,混合连接可用于访问其他网络中的应用程序资源。它提供从你的应用程序到应用程序终结点的访问,并使用 Azure 中继服务连接到 on-premise。 查看下面的 link 了解更多详情:

https://docs.microsoft.com/en-us/azure/app-service/app-service-hybrid-connections

第一个选项是查看 azure app service 混合连接,但要做到这一点,您应该拥有 Windows 服务器 2012 或更高版本。

Azure App Service Hybrid

如果您提取少量数据,Azure App Service 混合连接非常适合。

如果您正在提取大量数据或您的 SQL 服务器版本低于服务器 2012,您有两个选择:

  1. Azure Site to Site VPN

  2. Azure SQL Data Sync

Azure SQL 数据库同步是 Azure SQL 数据库上可用的一项功能。您可以在 Azure 上创建一个 Azure SQL 数据库并将您的 on-premise SQL 数据库或 SQL 数据库 table 同步到 Azure SQL 数据库,您可以将您的应用程序连接到 Azure SQL 数据库,而不是连接到 on-premise 数据库服务器。这将提高您的应用程序的性能。

我们最终将应用程序添加到允许连接到我们的 on-prem 服务器的 Azure 虚拟网络。剩下的困难是由于打开了错误的端口号。

Azure 中的 Kudu 控制台在高级工具 -> 控制台下对调试很有帮助。在那里,您可以从托管您的应用程序的计算机发出 运行 命令,例如 ping,或以下命令:

sqlcmd -S tcp:servername,1433 -U 用户名 -d 数据库名 -P 密码 -q "SELECT * FROM tablename"