0

我正在使用 NUnit 运行一组测试。每个测试都连接到 PostgreSQL 数据库并在那里做一些事情。

有时我会通过此堆栈跟踪获得 NullReferenceException:

 at Devart.Data.PostgreSql.o.a(Byte[] A_0, Int32 A_1, Int32 A_2, Int32 A_3)
   at Devart.Data.PostgreSql.o.b(Byte[] A_0, Int32 A_1, Int32 A_2)
   at Devart.Data.PostgreSql.o.a(Char A_0)
   at Devart.Data.PostgreSql.r.b(Char A_0)
   at Devart.Data.PostgreSql.r.d(af A_0)
   at Devart.Data.PostgreSql.i.a(af A_0, Boolean A_1, Boolean A_2, Boolean A_3)
   at Devart.Data.PostgreSql.i.a(af A_0, Boolean A_1, Boolean A_2)
   at Devart.Data.PostgreSql.i.a(af A_0, Boolean A_1)
   at Devart.Data.PostgreSql.af.n()
   at Devart.Data.PostgreSql.ag.a(af A_0, Boolean A_1)
   at Devart.Data.PostgreSql.ag.a(af A_0)
   at Devart.Data.PostgreSql.ag.o()
   at Devart.Data.PostgreSql.ag.a()
   at Devart.Common.DbConnectionInternal.ao()
   at Devart.Common.DbConnectionFactory.a(DbConnectionBase A_0)
   at Devart.Common.DbConnectionClosed.Open(DbConnectionBase outerConnection)
   at Devart.Common.DbConnectionBase.Open()
   at Devart.Data.PostgreSql.PgSqlConnection.Open()
   at SAserviceTest.ScriptInvocations.ScriptInvoker.ExecuteSqlScript(String sqlFileName, Object[] parameters) in 

在 PostgreSQL 日志中,我发现以下条目:

2012-12-13 15:04:41 CET DZIENNIK:  Could not receive data from client: Unknown winsock error 10061
2012-12-13 15:04:41 CET DZIENNIK:  Unexpected EOF on client connection

我不知道是什么导致了这些随机错误。在我的机器上使用本地 PostgreSQL 服务器和在远程构建服务器上使用远程 PostgreSQL 服务器也是如此。

错误是真正随机的,并且在运行单个测试时永远不会发生 - 我必须一个接一个地运行一堆测试才能发生此错误。不涉及 RAM/磁盘空间/硬件问题。

4

1 回答 1

0

从服务器的角度来看,这显然是 TCP 连接意外关闭的问题。问题是为什么。听起来好像有什么东西正在关闭 TCP 连接或状态正在损坏。无论哪种方式,这听起来都发生在比您自己的代码更低的级别上。

阅读堆栈转储,我想知道 devart 是否在内部实现某种连接池并且连接关闭得太早。鉴于这永远不会在您的代码中的同一位置发生,我的想法是,在这种情况下,向 Devart 开发人员提交的错误报告可能是解决此问题的最有效方法。

于 2013-04-18T04:47:47.483 回答