ASP.NET网站在完全50个请求后崩溃

时间:2016-11-25 13:40:02

标签: c# asp.net firebird firebird2.5

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

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

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

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

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

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

我已经提到过,这个问题在具有独立本地数据库的不同系统中仍然存在。数据库备份/恢复毫无用处,就像重新启动Firebird服务一样。只有Web服务器重启才能完成。

感谢任何想法...

1 个答案:

答案 0 :(得分:3)

谢谢,Liam / DrMistry / Mark,

就是这样。神秘的“50”是连接字符串中的最大池大小。这个我追逐几天的错误是我见过的最简单的错误 - 数据库连接完成的行是重复。像这样:

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

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

删除两条完全相同的行中的一行解决了这个问题,当然......