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)。
在 .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)。