来自here:
当SQL Server客户端请求SQL Server资源时,客户端网络库使用端口1434向服务器发送UDP消息。SQLServer Browser用请求的实例的TCP / IP端口或命名管道进行响应。
显然,当UDL或SSMS用于远程连接到SQL Server实例名称时,用于解析实例名称的端口号的查询存储在客户端计算机中的某个位置。
我在两台客户端计算机上对此进行了测试。打开1434 UDP端口后,第一台计算机可以连接到SQL Server实例名称。然后我关闭了端口,然后再次尝试使用该机器。第一个客户端仍可以在不打开端口的情况下进行连接。然后我尝试使用第二台机器,但无法连接。
我只是想知道缓存的方式和位置?
答案 0 :(得分:1)
像SqlClient这样的客户端API默认情况下使用connection pooling以避免每次打开连接时名称解析,物理网络连接和身份验证的开销。当初始连接关闭时,该连接将添加到连接池中,下次打开另一个具有相同属性的连接时,该连接池可以重新使用。在这种情况下,客户端API只需从池中检索和未使用的连接,避免了建立物理连接的大量开销。
对于命名实例,连接池还避免了每次打开连接时都需要查询SQL Server Browser服务,因此这可以解释您的观察。我怀疑如果在阻止UDP端口1434之后退出并重新启动应用程序,则由于在初始连接打开期间SQL Server Browser数据报查询失败,因此命名实例的SQL连接将失败。