SQL连接等待15秒,尽管连接字符串中有3秒超时

Ars*_*nko 6 c# connection-string sql-server-2008 connection-timeout

我有一个在本地网络上使用Microsoft SQL 2008 Server的网站。有时,SQL Server计算机会重新启动,因此网站无法连接到数据库。如果机器运行起来,它迅速作出反应。如果出现故障,则无需等待15秒。3秒还可以。

当数据库不可访问时,我想在网站上表示歉意,并希望尽快做到。但是Connection Timeout=3在连接字符串中设置似乎无效。该页面花了22秒钟等待,然后再SqlException继续SqlConnection.Open();

它出什么问题了?难道它是一个覆盖了超时的隐藏配置?

目前,我的连接字符串是

Data Source=...;
Initial Catalog=...;
Integrated Security=True;
Connection Timeout=3
Run Code Online (Sandbox Code Playgroud)

如果我将其设置为...;ConnectionTimeout=3(无空格),

System.ArgumentException: Keyword not supported: 'connectiontimeout'.
Run Code Online (Sandbox Code Playgroud)

被抛出(奇怪的是,MSDN文档指示我们可以同时使用两个字符串)。

She*_* 蒋晟 2

在网络硬件向网络驱动程序报告连接超时之前有一个超时,网络驱动程序又通知等待网络 IO 的程序。您可以通过 telnet servername 1433 验证传输层超时(假设您的 sql 服务器正在侦听端口 1433)。

但对于初始化网络 API(假设您的 Web 应用程序位于其自己的应用程序池中)、发送请求并等待硬件超时的进程来说,3 秒太短了。更新 BIOS/固件/驱动程序可能不会减少太多响应时间。

最好是异步进行连接。我不建议使用 EndInvoke 来结束异步调用,因为不幸的用户可能仍然需要等待 3 秒才能在数据库关闭时看到任何响应。也许 Ajax 调用更好。如果您有很多用户不断访问您的网站,您可能需要缓存连接检查的结果并以对您的用户有意义的方式更新它。