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

时间:2018-07-31 15:03:43

标签: .net sql-server-2016 windows-server-2016

这是我的情况。一共有三台服务器:

  1. Windows Server 2016(服务器-1
  2. Windows Server 2016(服务器2
  3. 带有SQL Server 2016的Windows Server 2016( Server-SQL

我有一些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 之间的流量,如下所示: WireShark trace of SQL traffic

在尝试建立SQL连接时,WireShark根本不会捕获 Server-2 Server-SQL 之间的任何流量。

服务器2 服务器SQL 之间的网络连接已建立,如下所示: nslookup and ping results

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文件实际上在两个服务器上都已连接。

尽管进行了广泛的谷歌搜索,但我没有发现任何关于此特定错误消息的痕迹,因此,我在这里没有其他要继续的事情了。

我是否正在寻找有人弄错了的注册表项?我没主意了。

对于此情况的任何帮助或帮助,都会非常好

谢谢。

0 个答案:

没有答案