SSMS 立即连接数据库,而 C# 中的 SqlClient 需要一分钟?

SSMS connects the database instantly while the SqlClient in C# takes a minute?

在 .Net Core 3.0 控制台应用程序 (System.Data.SqlClient) 中,我必须添加 Connect Timeout 以防止超时异常。

using var conn = new SqlConnection($"Server={server};Database={db};Trusted_Connection=True;MultipleActiveResultSets=true;Connect Timeout=60");
conn.Open(); // Waiting....

但是,它在 Sql Server management studio(在同一台 PC 上)中立即连接?缓慢的原因可能是什么?

nslookup myserver 

输出

Server: a-ns02.mydomain.net
Address: 168.40.0.1

Name: myserver.ad.mydomain.net
Addresses: 10.120.x.x
           10.140.y.y 

看起来这是一个 Multi-Subnet AG Listener,对吧?如果是这样,请尝试在连接字符串中添加 MultiSubnetFailover=true

这在 .NET Framework 上不再发生,因为 TransparentNetworkIPResolution 是在 .NET Framework 4.6.1 中实现的。 SSMS 使用 .NET Framework 版本的 SqlClient。

但是 .NET Core 中还没有此增强功能(如果由于某种原因您无法更改连接字符串,则在集群中的客户端访问点上跟踪 issue). Until it's fixed you'll have to explicitly set MultiSubnetFailover=true to avoid these timeouts. (Or disable RegisterAllProviderIP)。