我正在使用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 /磁盘空间/硬件问题。
答案 0 :(得分:0)
这显然是TCP连接从服务器的角度意外关闭的问题。问题是为什么。听起来有些事情正在关闭TCP连接或状态正在被破坏。无论哪种方式,这听起来都比你自己的代码更低。
读取堆栈转储,让我想知道devart是否在内部实现某种连接池,并且连接过早关闭。鉴于这种情况永远不会发生在您的代码中的同一个地方,我的想法是,这种情况下,向Devart开发人员提交的错误报告可能是解决此问题的最有效方法。