我已经构建了一个winforms应用程序,该应用程序安装在客户端计算机上,其中SQL Server数据库托管在服务器上,客户端通过远程连接进行访问。
应用程序按计划在服务器和一个客户端上运行,但是当我尝试从第二个客户端访问相同的数据时,我收到“登录前握手”错误。
在研究方面,我发现了许多解决方案,其中一些说明我需要启用IPV4和IPV6,其他人说我需要启用远程连接,这不是问题,因为其他客户端已经访问它。
任何人都可以给我任何关于问题可能的指示吗?
运行的客户端:64位处理器,Windows 8操作系统。 不运行的客户端:32位处理器,Windows Vista。
Clents还可以通过本地网络上的ClickOnce访问应用程序。 应用程序目标OS当前设置为x64。 我将切换到任何CPU和x86,并在我到办公室时报告是否有任何变化。
答案 0 :(得分:0)
你的x64盒子可以看到服务器而你的32位盒子是不可能的。两个盒子是否连接到同一个交换机,还是通过不同的网络路径到达服务器?正如Eric所说,可能有防火墙阻塞了32位机器和SQL机箱之间的SQL Server端口。
此外,来自失败的计算机,检查它认为SQL Box所在的网络地址:
C:\> nslookup TestSQLServer
Server: dns1.internal.foo.com
Address: 10.1.10.2
Non-authoritative answer:
Name: TestSQLServer
Address: 10.1.10.141
如果您的DNS返回SQL框的IPv6地址,请确保发生故障的客户端已安装并启用了IPv6。
As discussed in this thread,尝试将SQL Server设置为侦听特定网络接口并尝试连接到该接口的IP地址。注意:如果客户端代码是通过DHCP动态分配的,请不要对客户端代码进行硬编码以与该IP地址通信。
还要检查服务器正在侦听哪个端口 - 如果它已从默认值更改,则必须在客户端的连接字符串/代码中指定端口号。
我建议在发生故障的客户端和服务器之间彻底测试网络。
测试失败的客户端是否可以在网络上看到SQL Server
测试您是否可以使用SQLCMD从发生故障的客户端连接到SQL Server。确保使用客户端用于登录SQL Server E.g的相同凭据进行连接:
sqlcmd -S TestSQLServer\TestInstance1 -D TestDB -U TestUser -P TestPassword -Q select * from TestData