Connection.open无限期挂起,不会抛出任何exception

当我尝试执行以下代码时,程序将无限期挂起。 我不知道为什么,似乎还有其他未解答的话题。 虽然,如果无法访问IP \网站,那么它按预期工作。

private void DoStuff() { string connectionString = "Data Source=www.google.com;Connection Timeout=5"; using (SqlConnection connection = new SqlConnection(connectionString)) { connection.Open(); //Hangs here indefinitely Console.WriteLine("Test"); } } 

例如,如果我将连接字符串设置为

connectionString = "Data Source=www.nonexistentsite.com;Connection Timeout=5";

然后它会抛出exception。 如何让它为活动站点抛出exception? …显然, 谷歌只是出于测试目的。

编辑:

如果我尝试连接到无法访问的服务器名称或IP地址,我收到此exception…

A network-related or instance-specific error occurred while establishing a connection to SQL Server. The server was not found or was not accessible. Verify that the instance name is correct and that SQL Server is configured to allow remote connections. (provider: Named Pipes Provider, error: 40 - Could not open a connection to SQL Server)

更新:

让程序运行了很长一段时间后,它通常会在3-5分钟后超时并给我上面发布的错误。 如何让它更快地超时?

如果您为Data Source例如example.com )设置了FQDN(完全限定域名),并且DNS服务器长时间无法解析此FQDN,则很明显您的请求将会挂起。 确保运行应用程序的计算机可以访问SQL Server并解决它而不会出现任何问题。 此外,您可能希望确保没有可能阻止请求的防火墙。

这些症状的另一个可能原因是您已经用尽了ADO.NET的连接池。 如果您有许多并行运行的慢速SQL查询,则会发生这种情况,每个查询都与数据库建立物理连接。 此池上的可用连接数有限制,当达到此限制时,下一次调用connection.Open()可能会等待将可用连接返回到池中。

备注:您可能还需要在连接字符串中指定要对SQL Server进行身份validation的方式。 有关更多示例,请访问connectionstrings.com

这就是说你在问题中发布的C#代码绝对没有错。 它看起来更像是一个网络相关问题,您可以引起网络管理员的注意。

要在连接指定的时间后退出连接而不成功,可以使用连接字符串中的“ Connection Timeout参数。 您指定的数字以秒为单位,因此例如, Connection Timeout=240等于240秒\ 60秒= 4分钟。

示例连接字符串:

  

在上面的连接字符串中, Open()命令将在10秒后超时