我发现当我从安装在 ServerB 上的 SSMS 连接到远程 SQL 命名实例 (ServerA\instanceA) 时,它确实连接没有错误,但它使用了命名管道协议。
当我注意到 SQL 命名实例端口 (50002) 被防火墙阻止时,我发现了这一点。
从 SSMS(在 serverB 上),当我尝试连接到 ServerA,50002 时出现错误,但当我连接到 ServerA\InstanceA 时它成功。
我用谷歌搜索了它,但找不到任何好的文档来解释它的工作原理。
我检查了一下,没有看到 ServerA 的任何别名或任何特定配置。
如果您能帮助我了解它是如何(以及为什么)工作的,我将不胜感激。
尽管命名实例 TCP 端口 50002 被阻止,但端口 445 用于命名管道 (SMB),并且显然被防火墙允许。
SqlClient 驱动程序首先尝试 TCP/IP,然后在 TCP 连接失败时回退并尝试命名管道。这在客户端协议属性文档页面中被提及。这就是为什么当连接失败时,人们经常会在错误消息中看到对命名管道的引用。
IIRC,较旧的驱动程序首先尝试命名管道,只有在失败时才尝试使用 TCP/IP。