ASP.NET 恰好 50 个请求后网站崩溃

ASP.NET Website Crashes After Exactly 50 Requests

我正在托管一个 ASP.NET 网站 API,该网站已经投入生产多年,并且已经进行了数十次更新。突然之间,仅对代码进行了微小更改后,API 在 恰好 50 个请求 后崩溃,无论使用的是哪种浏览器或客户端。 Web 服务器重新启动会立即恢复 API 可用性(应用程序池回收不会),但神秘的倒计时重新开始...

这种奇怪的效果在多台机器(Windows Server 2008、Windows Server 2013 和 Windows 7)和不同的 Web 服务器(IIS 7.5、IIS 8.5、UltiDev)中持续存在网络服务器)。 IDE 是 Visual Studio 社区 2015; .NET 版本是 4.5.2.

我还没有添加外部 API 依赖项。我怀疑 Firebird(唯一的外部依赖项)施加了“50”的限制,但我所有的试验和谷歌搜索都无济于事。

我能提取的唯一半途有用的日志消息说 DB 连接因超时错误而失败。 (我正在使用 Firebird 2.5 SuperServer x64 和 Firebird .NET Provider 以及版本 3.0.2 的 FirebirdSql.Data.FirebirdClient.dll,到目前为止它对我很有用。)不过,我可以连接到数据库并通过 FlameRobin 浏览它。无论如何,只要我回到以前的 API 版本,一切都会正常。

崩溃后,之前清除的 firebird.log 包含 50 条相同的消息,如下所示:

AB-01234-CD (Server)    Fri Nov 25 14:22:57 2016
    INET/inet_error: read errno = 10054

我已经提到这个问题在具有独立本地数据库的不同系统中仍然存在。 DBbackup/restore没用,就像重启Firebird服务一样。只有重新启动 Web 服务器才行。

感谢任何想法...

谢谢,Liam/DrMistry/Mark,

原来如此。神秘的“50”是连接字符串中的最大池大小。我追查了好几天的错误是我见过的最简单的错误之一——完成数据库连接的行是 重复的 。像这样:

db.Connect();
db.Connect();

由于只有第二个连接被关闭,每个请求都会将一个连接发送到 limbo,因此连接池很快就被挤满了。如果您有机会在周五晚上发布,就会发生这种情况!

删除两个相同的行之一解决了问题,当然...