我们有一个使用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服务。
请帮助我们提供您的建议和解决方案,以实现这一目标。这篇文章是在经过各种博客试用和错误之后提出的。
答案 0 :(得分:0)
这几乎可以肯定是因为没有正确处理连接(https://stackoverflow.com/a/5442062/221708),在您的情况下可能是由于没有正确处理NHibernate会话而导致的。就像你应该在using
块中包装连接一样,你应该在using
块中包装NHibernate会话。
以下是一些关于在WCF中管理NHibernate会话的好文章:
另请注意,如果您使用的是sessionFactory.OpenSession(IDbConnection)
重载,则您有责任关闭session.Close()
返回的连接。