未启用任何远程客户端协议,且连接字符串中未指定任何远程协议

未启用任何远程客户端协议,且连接字符串中未指定任何远程协议

我的情况如下。有三台服务器:

  1. Windows Server 2016(服务器-1
  2. Windows Server 2016(服务器-2
  3. Windows Server 2016 和 SQL Server 2016(服务器端SQL

我有一些 C# 代码连接到服务器端SQL两者相同服务器-1服务器-2具有相同的连接字符串。

连接字符串如下所示:

Provider=MSOLEDBSQL;Server=Server-SQL;Database=database;Uid=user;Pwd=password;Encrypt=yes

新的 2018 版 OLE DB 驱动程序已安装在两者上服务器-1服务器-2

启用/禁用加密的注册表项在两台服务器上设置相同。例如

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.0\Client
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.1\Client
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Client

在以下位置运行相同的 C# 代码时服务器-1服务器-2服务器-1连接到数据库没有问题,但是服务器-2抛出以下错误信息:

建立与 SQL Server 的连接时发生与网络相关或特定于实例的错误。找不到或无法访问服务器。请检查实例名称是否正确以及 SQL Server 是否配置为允许远程连接。有关详细信息,请参阅 SQL Server 联机丛书。SQL Server 网络接口:未启用任何远程客户端协议,并且未在连接字符串 [xFFFFFFFF] 中指定任何远程协议。

具有以下堆栈跟踪:

   at System.Data.OleDb.OleDbConnectionInternal..ctor(OleDbConnectionString constr, OleDbConnection connection)
   at System.Data.OleDb.OleDbConnectionFactory.CreateConnection(DbConnectionOptions options, DbConnectionPoolKey poolKey, Object poolGroupProviderInfo, DbConnectionPool pool, DbConnection wningObject)
   at System.Data.ProviderBase.DbConnectionFactory.CreateConnection(DbConnectionOptions options, DbConnectionPoolKey poolKey, Object poolGroupProviderInfo, DbConnectionPool pool, DbConnection owningConnection, DbConnectionOptions userOptions)
   at System.Data.ProviderBase.DbConnectionFactory.CreateNonPooledConnection(DbConnection owningConnection, DbConnectionPoolGroup poolGroup, DbConnectionOptions userOptions)
   at System.Data.ProviderBase.DbConnectionFactory.TryGetConnection(DbConnection owningConnection, TaskCompletionSource`1 retry, DbConnectionOptions userOptions, DbConnectionInternal oldConnection, DbConnectionInternal& connection)
   at System.Data.ProviderBase.DbConnectionInternal.TryOpenConnectionInternal(DbConnection outerConnection, DbConnectionFactory connectionFactory, TaskCompletionSource`1 retry, DbConnectionOptions userOptions)
   at System.Data.ProviderBase.DbConnectionClosed.TryOpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory, TaskCompletionSource`1 retry, DbConnectionOptions userOptions)
   at System.Data.ProviderBase.DbConnectionInternal.OpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory)
   at System.Data.OleDb.OleDbConnection.Open()
   at Squealer.Squealer.TryToConnectToDatabase(DatabaseConnectionInfo connectionInfo)
   at Squealer.Squealer.Run(String[] args)

我在防火墙上没有看到任何规则服务器-1或者服务器-2这将阻止网络流量服务器端SQL

WireShark 捕获以下之间的流量:服务器-1服务器端SQL像这样: WireShark 跟踪 SQL 流量

WireShark 不会捕获任何流量服务器-2服务器端SQL尝试建立 SQL 连接时。

之间的网络连接服务器-2服务器端SQL规定如下: nslookup 和 ping 结果

SQL Server 配置为允许 TLS 1.1 和 TLS 1.2。当配置为使用 TLS 1.1 连接时,连接成功。

我已经使用 .net 4.6.2 和 4.7.0 编译了 .net 代码。两台服务器都安装了最高 .net 4.7.0。

测试具有 Provider=MSOLEDBSQL.1 的 UDL 文件实际上连接在两台服务器上。

尽管进行了广泛的谷歌搜索,我还是没有找到这个特定错误消息的任何踪迹,所以我在这里没有什么其他可以继续下去的。

我是不是在寻找某个被人弄乱的注册表项?我没主意了。

任何有关此情况的帮助或启示都将非常已收到。

谢谢。

相关内容