0

我遇到了一个非常奇怪的问题。我们使用Web Api 2.1和Enterprise Library 6数据块,并通过Unity使用依赖注入。我开始注意到,如果我刷新了我们的页面之一,最终我会遇到可怕的“超时过期。在从池中获取连接之前超时的时间”错误。网页上只有6个网页API调用。服务器在使用Enterprise Library和Unity时不放弃连接?

据推测,企业图书馆应该为我处置我的联系,所以我想知道它是否与我们使用DI和终身管理者有关?我们已经检查了我们的代码,并且我们已经在所有地方使用“块”。

不管怎么说,我环视看出:

检查Sql Server中的sysprocesses节目从我们的网站的连接是相当低(约8马克塞斯)。我偶尔会看到带有空登录名和nt_username字段的程序名称。我不确定那是关于什么的。这些刺激达到20个连接,但也往往很快消失(几秒钟内)。

但是,在我们的web api站点上检查PerfMon中用于SqlServer的.NET数据提供程序的计数器显示了联合数量的非常迅速的攀升。在几次刷新之后,上述页面将很快达到120〜连接。回收连接的数量在相当长一段时间内保持为0。最终,它会在经过长时间的不活动之后飙升。我读过这说明连接不正确。

一旦达到120个池连接,api站点将永久地返回500个连接池错误的错误,即使放弃了Sql Server上的连接,这远在IIS显示任何回收连接之前就已经发生了。 Sql Server可能会在闲置5分钟后放弃,而IIS会在30〜之后放弃。

+2

显示您的代码。你如何注入,以及如何开通连接。 Unity应该为你建立一个连接吗?是的,不,这取决于你如何使用它。 – abatishchev

+0

听起来像组件可能因为使用不正确的生活时间/生活方式而被注册,或者容器没有适当地释放它们。 –

回答

0

那么,这将是令人失望的。它最终成为我们其中一个图书馆的不恰当处置。

我已经检查了我正在使用的所有存储库类,但是我没有检查过我们的数据框架,它没有关闭数据阅读器的IResultSetMapper实现。