我正在托管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服务器)上。IDE是Visual Studio社区2015;.NET版本为4.5.2。
我没有添加外国API依赖性。我怀疑火鸟(唯一的外部依赖)强加了" 50"的限制,但是我所有的实验和谷歌搜索都是无济于事的。
我可以提取的唯一有用的日志消息说,由于超时错误, db连接失败了。(我使用的是Firebird 2.5 SuperServer X64和Firebird .Net提供商,带有3.0.2版的Firebirdsql.data.data.firebirdclient.dll ,它已经为我服务了。)到DB,并通过弗拉梅宾蛋白浏览。无论如何,一旦我回到上一个API版本,一切都可以正常工作。
崩溃后,先前清除的 firebird.log 包含50个相同的消息:
AB-01234-CD (Server) Fri Nov 25 14:22:57 2016
INET/inet_error: read errno = 10054
我已经提到,与独立本地数据库的不同系统之间的问题持续存在。DB备份/还原没有用,就像重新启动火鸟服务一样。只有Web服务器重新启动。
感谢您的想法...
谢谢,liam/drmistry/mark,
就是这样。神秘的" 50"是连接字符串中的最大池大小。我一直在追逐几天的错误是我见过的最简单的错误之一 - DB连接完成的行是重复的。这样:
db.Connect();
db.Connect();
由于仅关闭了第二个连接,因此每个请求都将一个连接发送到了困境,因此连接池很快被拥挤。如果您有机会在星期五晚上发布!
发生这种情况!删除两个相同行之一解决了问题,当然...