使用Nhibernate + Oracle的WCF无法间歇性地连接数据库

时间:2013-08-16 12:44:19

标签: asp.net wcf nhibernate oracle11g timeoutexception

我们有一个使用WCF开发的3层应用程序。我们的Web层[32位Windows 2003 Sp1]调用WCF服务[NLB上的64位Windows 2008 R2],它与Oracle 10g DB [64位Linux]进行通信。使用Nhibernate 2.2建立数据库连接。 WCF通信使用BasicHTTPBinding。

在32位测试环境中,应用程序运行良好,但在上面指定的Live环境中,我们遇到了崩溃问题。根据记录重复错误,

System.ApplicationException:>

是内在异常
  

NHibernate.ADOException:在准备选择stderrorme0_.ERR_NO时   ERR1_10_,stderrorme0_.ERR_TYPE为ERR2_10_,.... ....,来自   STD_ERROR_MESSAGE stderrorme0_其中stderrorme0_.ERR_NO =:p0错误   发生了---> System.InvalidOperationException:超时已过期。该   从池中获取连接之前经过的超时时间。   这可能是因为所有池连接都在使用中   已达到最大池大小。

此错误重复,只是正在获取的表发生更改。

临时解决方案:重新启动IIS中托管的WCF服务。

请帮助我们提供您的建议和解决方案,以实现这一目标。这篇文章是在经过各种博客试用和错误之后提出的。

1 个答案:

答案 0 :(得分:0)

这几乎可以肯定是因为没有正确处理连接(https://stackoverflow.com/a/5442062/221708),在您的情况下可能是由于没有正确处理NHibernate会话而导致的。就像你应该在using块中包装连接一样,你应该在using块中包装NHibernate会话。

以下是一些关于在WCF中管理NHibernate会话的好文章:

另请注意,如果您使用的是sessionFactory.OpenSession(IDbConnection)重载,则您有责任关闭session.Close()返回的连接。