我正在主持一个ASP.NET web API,它已经生产了好几年,并且已经看到几十个更新。突然之间,在代码稍做修改之后,无论使用哪个浏览器或客户端,API在恰好50个请求之后崩溃。 Web服务器重新启动会立即恢复API可用性(应用程序池回收不会),但神秘的倒计时重新开始...ASP.NET网站在经过50次请求后崩溃
这种奇怪的效果在多台计算机(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依赖项。我怀疑强加“50”的限制的Firebird(唯一的外部依赖),但是我所有的实验和Google搜索都无济于事。
我可以提取的唯一中途有用的日志消息说由于超时错误导致数据库连接失败。 (我使用的是Firebird 2.5 SuperServer x64和Firebird .NET Provider,版本3.0.2的FirebirdSql.Data.FirebirdClient.dll FirebirdSql.Data.FirebirdClient.dll,目前为止我服务的很好。)但是,我可以连接到数据库并浏览它通过FlameRobin。在任何情况下,只要我回到以前的API版本,一切正常。
空难后,先前被清除firebird.log包含50级这样的相同的消息:
AB--CD (Server) Fri Nov 25 14:22:57 2016
INET/inet_error: read errno = 10054
我已经提到的,这个问题在不同的系统中仍然存在独立的本地数据库。数据库备份/恢复无用,就像重新启动Firebird服务一样。只有Web服务器重新启动才能完成。
感谢您的任何想法...
我想像你不处置您的连接,并杏连接池。没有代码虽然,这是一个猜测 – Liam
我同意利亚姆 - 听起来像你没有关闭/处置SqlConnections或其他和连接池已满。 – DrMistry
错误10054是由同级重置的(winsock)连接。如果您有一个连接池(Firebird ado.net提供程序默认情况下),并且您在池中打开了50个连接,则应用程序崩溃会突然终止套接字,导致Firebird服务器记录这些错误。 Firebird本身不会强加连接限制,除非Windows上的Firebird SuperServer限制为最大1024(或更新版本中的2048)。我只能建议你仔细审查工作和非工作版本之间的变化。 –