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

在.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上)吗?缓慢的原因可能是什么?

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

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侦听器,对吗?如果是这样,请尝试在连接字符串中添加MultiSubnetFailover=true

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

但是.NET Core中尚未提供此增强功能(跟踪issue)。在修复该问题之前,您必须显式设置MultiSubnetFailover = true以避免这些超时。 (或者,出于某种原因,如果无法更改连接字符串,请在群集中的客户端访问点上禁用RegisterAllProviderIP

本文链接:https://www.f2er.com/3121763.html

大家都在问