【发布时间】:2016-04-09 14:36:06
【问题描述】:
我们目前正在努力将我们的 asp.net Web 应用程序(托管在 IIS 7.5 上)从 .net framework v4.5 更新到 v4.6.1。在 SQL Server 与 IIS 在同一个机器上运行的小型较低环境/本地开发中,此更新工作正常并且不会破坏任何内容。但是,一旦我们在测试环境中更新了从我们的 Web 服务器远程托管 SQL Server 的 Web 服务器,我们的应用程序就无法再建立到数据库的连接。我们收到此错误:
Connection Timeout Expired. The timeout period elapsed while attempting to
consume the pre-login handshake acknowledgement. This could be because the
pre-login handshake failed or the server was unable to respond back in time.
SQL Server 使用 CLR 版本 v4.0.30319 运行。 我们使用 Entity Framework 6.0.0.0 版本进行数据访问,连接字符串都使用集成安全性。我们是否还需要将托管 SQL 服务器的盒子更新为 .net 4.6.1?我不明白为什么我们的应用程序需要建立与数据库的连接,但我在 MSDN 上找不到任何关于此的指导。
编辑:
在此故障之后,我们将 Web 服务器降级回 .net v4.5,并且能够重新建立与 SQL 服务器的连接。重新升级到 v4.6.1 再次导致损坏。因此,我们相对确定问题在于升级,而不是应用程序代码和/或 IIS 设置的更改。
【问题讨论】:
-
检查 SQL 服务器上的事件查看器框以查看在错误发生时是否在应用程序或安全选项卡上生成了任何日志。还要检查端口是否打开,或者是否有阻止连接的访问控制列表。
-
另外,自上次运行以来,Web 服务器发生了哪些变化?
-
Web 服务器上的应用程序代码/IIS 设置没有变化。我们已将 Web 服务器降级回 .net 4.5,并且我们已与 SQL 服务器重新建立连接。重新升级到 4.6.1 会导致相同的损坏。这也表明端口是开放的。不过,我会检查 SQL 服务器框上的事件日志。
-
那么也可以将 SQL 框升级到 .net 4.6.1。本文指出处理 SQL 连接的方式在 4.6.1 中发生了更改:visualstudiomagazine.com/articles/2015/12/11/… 不过还没有找到确切的更改。
-
我们在生产中升级到 .NET 4.6.1 时遇到了同样的问题。我们在 DEV、QA 或 Staging 中没有发现这个问题。更糟糕的是,我们有 3 个 SQL Server (2008 R2),只有访问其中一个总是失败。回滚到 .NET 4.5.1 后,问题就消失了。我们 100% 确定此问题与 .NET 4.6.1 中超过 4.5.x 的连接更改有关。
标签: c# asp.net .net sql-server