我有一个ASP.Net MVC应用程序连接到Oracle数据库。我在控制器中使用LINQ从Oracle DB中提取数据。
如果该页面被加载,几分钟后,如果其空闲,它给出了上述错误。
现在我不能要求DBA增加空闲时间。在我的研究中,我看到Web.config文件中提到了池。我的理解是,由于Pooling,其中一些连接仍然活跃。我把这部分
int Size=1;最大池大小=20; Pooling=true
我必须在我的Web.config中明确地说:
Pooling=false
我也有在我的控制器,处置功能如下,但这并没有帮助:
protected override void Dispose(bool disposing)
{
if (disposing)
{
db.Dispose();
}
base.Dispose(disposing);
}
请帮帮我
3条答案
按热度按时间iaqfqrcu1#
如果DBA在服务器上为连接设置了空闲超时,那么使用此选项配置连接池。
最小池大小=0;
默认值为1。这将使ODP.NET客户端在应用程序空闲时不会在池中保留任何打开的空闲连接。当连接请求进来时,它仍然会增加池的大小,并且在满足初始请求时可能会稍微低效,因为它必须创建这些连接,但它会工作,并且没有空闲超时问题。
我同意一些评论,即不应该为这些情况在服务器上设置空闲超时,但我发现有些组织出于安全原因坚持这样做。
yquaqz182#
我有个办法当您在潜在的空闲延迟后恢复使用连接时,例如等待传入请求,请执行以下操作:
1.运行一些廉价的无操作查询,如
SELECT 1 FROM DUAL;
1.如果你得到你提到的错误,请确保连接完全关闭,然后打开一个新的。
1.正常使用连接。
与正确组织连接池相比,这有点像黑客,但这比每次需要时都打开一个新连接要好。
fruv7luv3#
您不必更改Idle_Time,您可以将以下内容附加到连接字符串。
String =True;
如Oracle文档中所述“”连接"属性验证来自池的连接。只有在绝对必要时才应使用此属性,因为它会导致在将每个连接提供给应用程序之前立即往返数据库以验证该连接。如果无效连接不常见,开发人员可以创建自己的事件处理程序来检索和验证新连接,而不是使用"连接“属性。这通常会提供更好的性能。”