将web服务器升级到.net框架4.6.1时,与远程SQL服务器的连接中断

本文关键字:服务器 中断 连接 1时 SQL web net 框架 | 更新日期: 2023-09-27 18:29:01

我们目前正在将我们的asp.net web应用程序(托管在IIS 7.5上)从.net framework v4.5更新到v4.6.1。在SQL server与IIS在同一个机箱上运行的小型较低环境/本地开发中,此更新运行良好,不会破坏任何内容。但是,一旦我们在测试环境中更新了web服务器,这些测试环境从web服务器远程托管SQL服务器,我们的应用程序就无法再建立与数据库的连接。我们收到这个错误:

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。我们使用实体框架6.0.0.0版本进行数据访问,连接字符串都使用集成安全性。我们是否也需要将承载SQL server的框更新为.net 4.6.1?我不明白为什么我们的应用程序需要建立与数据库的连接,但我在MSDN上找不到任何关于这方面的指导。

编辑:

在这次中断之后,我们将web服务器降级回.net v4.5,并能够重新建立与SQL服务器的连接。重新升级到v4.6.1再次导致中断。因此,我们相对确信升级是问题所在,而不是应用程序代码和/或IIS设置的更改。

将web服务器升级到.net框架4.6.1时,与远程SQL服务器的连接中断

更新-所以看起来我们已经找到了问题的解决方案。事实证明,正如异常所暗示的那样,通过增加连接字符串上的连接超时属性(默认值为15秒,我们将其设置为60秒),我们可以通过web应用程序连接到数据库。然而,打开这个连接需要很长的时间,所以我们开始寻找解决方案,让我们的连接更快地打开。我们已经发现,我们在数据库服务器上启用了TCP/IP上的Netbios,并且通过在网络上打开UDP端口(137138)用于Netbios访问,我们能够更快地打开与数据库的连接,时间为<1秒,而不是>15秒。我们仍然不确定为什么.net升级暴露了这个问题。通过使用UDL文件进行测试,我们能够确定到我们数据库的网络连接在.net 4.5上的web服务器上的性能与在.net 4.6.1上的web Server上的性能大致相同。因此,我们的联系似乎打开得如此缓慢,以至于我们已经非常接近超时,4.6.1中的某种额外逻辑/漏洞让我们处于边缘。如果我们对此有更明确的了解,我会更新的。

下面的文章描述了.net 4.6.1中SQL Server连接的一个新的默认连接字符串设置。

https://blogs.msdn.microsoft.com/dataaccesstechnologies/2016/05/07/connection-timeout-issue-with-net-framework-4-6-1-transparentnetworkipresolution/

这是为了解决某些环境中的一个问题,但也导致了您在其他环境中遇到的问题。

基本上,您需要添加以下连接字符串:

TransparentNetworkIPResolution=False;

您可能需要检查windows'micorsoft.net'framework64'v######'config文件夹中的machine.config和web.config文件。每个版本的.NET都运行在不同的配置文件上。由于在两个环境中都使用相同的代码,因此它必须来自从这里继承的配置。我猜4.6.1被设置为将连接字符串默认为localhost,并且由于local和dev中的SQL在同一台服务器上,所以这不是问题。您可能会发现,.NET 4.5版本中的配置有一个在localhost之外定义的连接字符串。

如果4.5和4.61使用相同的配置文件,请确保在该web.config中定义实体框架要使用的默认连接字符串。

首先,只有在使用Active Directory身份验证时才会出现此问题。

我已经修复了问题:将您的MSSQL服务器添加到本地(无法连接到MSSQL服务器的计算机)主机文件(%windir%''system32''drivers''etc''hosts)中。

例如:192.168.0.5 mssqlserver

名字其实并不重要。如果在一个IP地址上有多个SQL服务器(通过NAT连接),它也可以很好地工作。

此脏修复程序还将修复使用SQL Management Studio的缓慢加载问题。