这是我的情况。一共有三台服务器:
我有一些C#代码连接到 Server-SQL ,这在 Server-1 和 Server-2 上具有相同的连接字符串。
连接字符串如下所示:
Provider=MSOLEDBSQL;Server=Server-SQL;Database=database;Uid=user;Pwd=password;Encrypt=yes
服务器1 和服务器2 上均安装了新的2018年不推荐使用的OLE DB驱动程序。
在两个服务器上,启用/禁用加密的注册表项设置相同。例如
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
在服务器1 和服务器2 上运行相同的C#代码时,服务器1 连接到数据库没有问题,但是< strong> Server-2 抛出以下错误消息:
与网络相关或特定于实例的错误发生在 建立与SQL Server的连接。找不到服务器 无障碍。检查实例名称是否正确以及SQL Server是否正确 配置为允许远程连接。有关更多信息,请参见SQL。 服务器联机丛书。 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)
我在 Server-1 或 Server-2 的防火墙中都看不到任何规则,这些规则会阻止流向 Server-SQL的网络流量。
WireShark捕获 Server-1 和 Server-SQL 之间的流量,如下所示:
在尝试建立SQL连接时,WireShark根本不会捕获 Server-2 和 Server-SQL 之间的任何流量。
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文件实际上在两个服务器上都已连接。
尽管进行了广泛的谷歌搜索,但我没有发现任何关于此特定错误消息的痕迹,因此,我在这里没有其他要继续的事情了。
我是否正在寻找有人弄错了的注册表项?我没主意了。
对于此情况的任何帮助或帮助,都会非常好。
谢谢。