当我尝试连接到 SQL Server 时出现以下错误:
A connection was successfully established with the server, but then an error occurred during the pre-login handshake. (provider: TCP Provider, error: 0 - The semaphore timeout period has expired.
服务器是:Microsoft SQL Server 2014 (SP1-CU13) (KB4019099) - 12.0.4522.0 (X64) Jun 28 2017 17:36:31 Copyright (c) Microsoft Corporation Standard Edition (64-bit) on Windows NT 6.3 <X64> (Build 9600: ) (Hypervisor)
我是一名应用程序开发人员,而不是系统或网络专家,因此如果对我的问题的描述模糊或过于简单,请耐心等待。
我在公司环境中工作,此错误仅针对我的应用程序的某些用户。服务器位于本地,位于我的业务部门本地。所有用户都属于同一域,由中央 IT 管理并具有相同的系统配置,但只有海外用户无法连接。当海外用户使用中央 Windows 虚拟桌面连接时,没有问题。其他用户(来自我当地的业务部门)连接正常。
我已经从我的代码中测试了什么(如果重要的话,这是一个桌面.Net Core 应用程序):
System.Data.SqlClient
和都Microsoft.Data.SqlClient
引发了相同的错误tc = new System.Net.Sockets.TcpClient("myServerName", 1433)
连接良好- 连接字符串:(
Server={myServerName};Connection Timeout=60;Database={myDbName};Persist Security Info=False;User Id={user};Password={pass};
我尝试用 {ip},{port} 替换 myServerName,但结果相同) - 我测试了测试服务器和生产服务器的连接(我不确定它们是否是不同的机器,但它们的主机名解析为不同的 IP 地址),但结果是一样的
我可以排除数据库死锁或重负载等问题。此外,网络速度或质量也不应该成为问题。增加连接字符串的超时不会改变任何事情。请帮我解决我应该向管理员询问的问题。或者也许我可以尝试其他方法?
非常感谢!
答案1
这是防火墙问题——阻止来自特定地理位置的用户。