c# – ASP.NET网站在完成50个请求后崩溃
作者:互联网
我正在托管一个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,到目前为止我一直很好.)但是,我可以连接到数据库并通过它浏览FlameRobin.无论如何,一旦我回到之前的API版本,一切正常.
崩溃后,之前清除的firebird.log包含50条相同的消息,如下所示:
AB-01234-CD (Server) Fri Nov 25 14:22:57 2016
INET/inet_error: read errno = 10054
我已经提到过,这个问题在具有独立本地数据库的不同系统中仍然存在.数据库备份/恢复毫无用处,就像重新启动Firebird服务一样.只有Web服务器重启才能执行.
谢谢你的任何想法……
解决方法:
谢谢Liam / DrMistry / Mark,
就是这样.神秘的“50”是连接字符串中的最大池大小.这几天我追逐的错误是我见过的最简单的错误 – 数据库连接完成的行是重复的.像这样:
db.Connect();
db.Connect();
由于只有第二个连接关闭,每个请求都会将一个连接发送到边界,因此连接池很快就会拥挤.如果您有机会在周五晚上发布会发生这种情况
当然,删除两条完全相同的线条中的一条解决了这个问题……
标签:c,asp-net,firebird,firebird2-5 来源: https://codeday.me/bug/20190627/1309136.html