最近我还参与了Azure混合连接,并列出了我遇到的所有可能出现的问题。以下之一可能是原因:
- 混合连接可能仅适用于SQL Server的默认实例,并且在使用命名实例时可能会失败。即使命名实例配置为使用静态TCP端口,但可能无法与混合连接一起使用。
可能的原因可能是您的命名实例可能正在侦听与默认实例相同的TCP端口。由于混合连接使用端口进行通信,因此在多个实例正在侦听同一端口的情况下,无论您在命名实例中提供了什么实例,混合连接都可以与任何实例进行通信。
- 要使混合连接正常工作,您需要在本地计算机上为服务器和客户端启用TLS 1.0。您需要添加以下注册值(如果尚未添加):
[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或更高版本才能使用。原因是混合连接使用早期Windows版本不支持的Web套接字。虽然您可以使用经典的混合连接(现在已删除)来使用早期的Windows。
- 最好使用端点的完全限定机器名称而不是IP地址。如果您的机器的IP不太可能在那里使用,它可能没有效果,但是在IP可能发生变化的情况下,您应该使用机器名称并让HCM为您处理其他所有事情。
还可以找到创建混合连接的非常全面的演练here
希望这能解决你的问题。
感谢回复,我终于弄明白了。我犯的错误是我只是在指定azure和我的代码中指定SQL Server名称和端口号(在我的情况下为433)连接字符串后面只有提到的服务器名称。
然而,当我更新后面代码中的连接字符串以包含TCP端口时,我能够成功运行应用程序与Hybrid连接一起查询来自SQL Server的结果。