C# web app not connecting to on premise SQL Server through Azure hybrid Connection
到目前为止我已采取的步骤
如果您有任何进一步的建议,请告诉我。
感谢您的回复,我终于弄明白了。我犯的错误是我仅在部署到 azure 时指定了 SQL Server 名称和端口号(在我的情况下为 433),并且在我的代码中连接字符串只提到了服务器名称。
但是,当我在后面的代码中更新连接字符串以包含 TCP 端口时,我能够成功地运行应用程序以及混合连接以从 SQL Server 查询结果。
最近我也在研究 Azure 混合连接,并列出了我面临的所有可能的问题。以下原因之一可能是原因:
-
混合连接可能仅适用于 SQL Server 的默认实例,并且在使用命名实例的情况下可能会失败。即使命名实例配置为使用静态 TCP 端口,也可能无法与混合连接一起使用。
可能的原因可能是您的命名实例可能正在侦听与默认实例相同的 TCP 端口。由于混合连接使用端口进行通信,因此如果多个实例在同一个端口上侦听,那么混合连接可能会与其中任何一个进行通信,无论您在命名实例中提供了什么实例。 - 为了使混合连接正常工作,您需要在本地计算机上为服务器和客户端启用 TLS 1.0。您需要添加以下注册值(如果尚未添加):
1 2 3 4 5 6 7 8 9 | [HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Control\\SecurityProviders\\SCHANNEL\\Protocols\\TLS 1.0] [HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Control\\SecurityProviders\\SCHANNEL\\Protocols\\TLS 1.0\\Client] "DisabledByDefault"=dword:00000000 "Enabled"=dword:00000001 [HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Control\\SecurityProviders\\SCHANNEL\\Protocols\\TLS 1.0\\Server] "DisabledByDefault"=dword:00000000 "Enabled"=dword:00000001 |
- 只有在连接字符串使用 SQL 身份验证(即在连接字符串中指定用户名和密码)时,混合连接才会起作用。因此,您不能使用 Windows 身份验证。
-
尽管您不需要为入站连接打开任何防火墙端口,但您需要允许到以下端口列表的出站连接:
9350 – 9354,
5671,
80,
443 - Azure 混合连接需要 Windows 8/Windows Server 2012 或更高版本才能使用。原因是混合连接使用的 Web 套接字在较早的 Windows 版本中不受支持。尽管您可以使用经典的混合连接(现已弃用)来处理早期的 Windows。
- 最好对端点使用完全限定的机器名称,而不是 IP 地址。如果您的机器的 IP 不太可能在那里更改,它可能没有任何效果,但在 IP 可能更改的情况下,您应该使用机器名称并让 HCM 为您处理其他所有事情。
还可以在此处找到创建混合连接的非常全面的演练
希望这能解决您的问题。