【问题标题】:Connection issue in ASP.NET MVC + NHibernate+Oracle application after a couple of minutes几分钟后 ASP.NET MVC + NHibernate+Oracle 应用程序中的连接问题
【发布时间】:2014-06-21 03:54:32
【问题描述】:

首先,我们有一个使用 NHibernate(版本 3)和 Oracle 11g 数据库的 MVC Web 应用程序。

应用程序正在运行,但是当我们在生产服务器中发布时,发生了一个奇怪的场景:

  1. 用户访问应用程序并执行任务,例如,选择菜单链接。
  2. 用户等待几分钟(2-3 分钟)。
  3. 用户执行另一项任务,例如,重新加载同一页面或选择另一个链接进入菜单。
  4. 应用程序失败并出现ORA-12571: TNS:packet writer failure 异常。
  5. 用户只需刷新错误页面,应用就可以工作了。

我们尝试做的第一件事是隔离问题,因此我们将应用程序发布到另一个配置完全相同的服务器:

  1. 当然是相同的二进制文件。
  2. 相同的 Oracle x64 客户端版本,甚至是次要版本。
  3. 与 IIS 7.5 相同的 Windows Server 2008 版本。
  4. 相同的 IIS 配置(我们使用 WinMerge 比较了 windows/system32/inetsrv/config 文件)。
  5. 访问相同的生产数据库。

令我们惊讶的是,我们无法重现该问题。

拜托,有人知道发生了什么吗?

【问题讨论】:

  • 听起来更像是防火墙设置,或者杀毒,看看dba-oracle.com/t_ora_12571_tns_packet_writer_failure.htm
  • 有可能。但实际上是oracle客户端驱动的问题。
  • @LowFlyingPelican:是的,它可能是防火墙,但在某些情况下,不可能更改 Oracle 服务器或防火墙设置(我们无法控制)。 Gustavo 的解决方案对我来说似乎要简单得多。

标签: asp.net nhibernate oracle11g


【解决方案1】:

问题与服务器的oracle客户端的连接池有关。似乎它正在向 Web 应用程序提供无效连接,而在其他服务器中则不会发生。

解决方案不是很有趣,但是将Validate Connection = True 放在连接字符串中解决了这个问题。我知道这样做会降低性能,但我别无选择。

PS:使用此标志,连接池服务将每个连接传递给客户端应用程序之前验证每个连接。这不是很好,因为每个连接请求都会发生数据库往返。

【讨论】:

  • 我已经为我的类似问题搜索了一段时间的解决方案,我认为这是我能想到的最好的解决方案。感谢您确认它正在运行。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-06-15
  • 2021-12-26
  • 2018-09-20
  • 1970-01-01
  • 2018-06-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多