我无法通过托管在另一个 Azure VM 上的 Web 应用程序连接到托管 SQL Server 的 Windows Azure 虚拟机。我在登录页面本身上收到一个应用程序错误,上面写着“对象引用未设置为对象实例”。我无法连接到数据库。
1 回答
为了在 VM 上运行的 SQL 服务器与任何其他应用程序之间设置连接,您必须确保 SQL 服务器和它自己的 VM 都有连接设置:
虚拟机:
vm 有它的防火墙,除了你在防火墙中定义的规则之外,它会阻止对 VM 的任何访问,如果你想访问 vm,你必须在防火墙中打开相关端口。(顺便说一句,ping 服务器在防火墙上启用 ICMP ...)
做笔记: - 如果您希望在私有网络内打开一个端口,它由防火墙完成,但如果您希望走出私有网络,请确保您需要在 azure 门户中设置端点并通过该端口与机器相关联。
- 如果您只想打开相关 IP 的端口,我会告诉您 azure 端点(除非您通过 azure power shell 设置它们)是在 azure 负载平衡后面定义的,并且对 VM 的访问将来自负载平衡器 IP ...克服这个问题的一种方法是使用 azure 提供的新功能 - 端点 acl(我认为它在预览中并没有对此非常清楚)或打开负载均衡器 ip。
关于 SQL 服务器,当尝试连接到 sql 服务器时,正在发生以下通信: - 应用程序正在向服务器发送 UDP 消息并询问它应该在哪个端口访问服务器,该 udp 消息在端口 1434 中发送 -因此,您还应该授予对该端口的访问权限, - 如果在 sql server 设置中启用了动态端口,则服务器可能会 sql server 侦听该 udp 1434 并返回一个未使用的 tcp 端口,然后它将侦听来自该应用程序的通信。- 如果您禁用动态端口并设置为 sql 通信的默认端口(tcp 1433),您将能够使用机器上的 udp 1434 打开该端口并且通信将正常工作,如果这不是安全问题的话您可以允许所有端口并启用动态端口。
无论如何-您需要结合所有这些设置-与您的服务器结构相关以启用通信。
希望我有所帮助