【发布时间】:2017-01-09 10:43:40
【问题描述】:
我的一个 SQL (PostgreSQL) 查询出现问题,该查询由带有 Devart 连接器的实体框架生成。正好 60 秒后(每次),我得到一个错误:
System.Data.Entity.Core.EntityCommandExecutionException:错误 执行命令定义时发生。见内 细节例外。 ---> Devart.Data.PostgreSql.PgSqlException: 读取失败 ---> System.IO.IOException: 读取失败 ---> System.Net.Sockets.SocketException:连接尝试失败 因为连接方在一段时间后没有正确响应 时间,或建立连接失败,因为连接的主机有 没有回应 在 System.Net.Sockets.Socket.Receive(System.Byte[] 缓冲区,Int32 偏移量,Int32 大小,SocketFlags 标志)[0x00000] in :0 在 System.Net.Sockets.NetworkStream.Read(System.Byte[] 缓冲区,Int32 偏移量,Int32 大小)[0x00000] in :0 --- 内部异常堆栈跟踪结束 --- 在 System.Net.Sockets.NetworkStream.Read(System.Byte[] 缓冲区,Int32 偏移量,Int32 大小)[0x00000] in :0 在 Devart.Common.au.a (System.Byte[] A_0, Int32 A_1, Int32 A_2) [0x00000] in :0 --- 内部异常堆栈跟踪结束 --- 在 Devart.Data.PostgreSql.aa.d (System.Exception A_0) [0x00000] in :0 在 Devart.Common.z.d (System.Byte[] A_0, Int32 A_1, Int32 A_2) [0x00000] in :0 在 Devart.Common.ae.a (System.Byte[] A_0, Int32 A_1, Int32 A_2) [0x00000] in :0 在 Devart.Data.PostgreSql.x.c (System.Byte[] A_0, Int32 A_1, Int32 A_2) [0x00000] in :0 在 Devart.Data.PostgreSql.x.f () [0x00000] 中:0 在 Devart.Data.PostgreSql.ai.a (Boolean A_0, Boolean A_1, Char A_2, Boolean A_3) [0x00000] in :0 在 Devart.Data.PostgreSql.ai.b (Boolean A_0, Boolean A_1) [0x00000] in :0 在 Devart.Data.PostgreSql.ai.c (Boolean A_0) [0x00000] in :0 在 Devart.Data.PostgreSql.ae.b (Boolean A_0) [0x00000] in :0 在 Devart.Data.PostgreSql.ae.g (Devart.Data.PostgreSql.ac A_0) [0x00000] 在:0 在 Devart.Data.PostgreSql.ae.b (Devart.Data.PostgreSql.ac A_0) [0x00000] 在:0 在 Devart.Data.PostgreSql.ac.af () [0x00000] 在 :0 在 Devart.Data.PostgreSql.PgSqlDataReader.f (Int32 A_0) [0x00000] 在:0 --- 内部异常堆栈跟踪结束 --- 在 System.Data.Entity.Core.EntityClient.Internal.EntityCommandDefinition.ExecuteStoreCommands (System.Data.Entity.Core.EntityClient.EntityCommand entityCommand, CommandBehavior 行为)[0x00000] in :0 在 System.Data.Entity.Core.Objects.Internal.ObjectQueryExecutionPlan.Execute[LisExaminationRequest] (System.Data.Entity.Core.Objects.ObjectContext 上下文, System.Data.Entity.Core.Objects.ObjectParameterCollection 参数值)[0x00000] in :0 [错误] 致命的未处理异常:System.Data.Entity.Core.EntityCommandExecutionException:错误 执行命令定义时发生。见内 细节例外。 ---> Devart.Data.PostgreSql.PgSqlException: 读取失败 ---> System.IO.IOException: 读取失败 ---> System.Net.Sockets.SocketException:连接尝试失败 因为连接方在一段时间后没有正确响应 时间,或建立连接失败,因为连接的主机有 没有回应 在 System.Net.Sockets.Socket.Receive(System.Byte[] 缓冲区,Int32 偏移量,Int32 大小,SocketFlags 标志)[0x00000] in :0 在 System.Net.Sockets.NetworkStream.Read(System.Byte[] 缓冲区,Int32 偏移量,Int32 大小)[0x00000] in :0 --- 内部异常堆栈跟踪结束 --- 在 System.Net.Sockets.NetworkStream.Read(System.Byte[] 缓冲区,Int32 偏移量,Int32 大小)[0x00000] in :0 在 Devart.Common.au.a (System.Byte[] A_0, Int32 A_1, Int32 A_2) [0x00000] in :0 --- 内部异常堆栈跟踪结束 --- 在 Devart.Data.PostgreSql.aa.d (System.Exception A_0) [0x00000] in :0 在 Devart.Common.z.d (System.Byte[] A_0, Int32 A_1, Int32 A_2) [0x00000] in :0 在 Devart.Common.ae.a (System.Byte[] A_0, Int32 A_1, Int32 A_2) [0x00000] in :0 在 Devart.Data.PostgreSql.x.c (System.Byte[] A_0, Int32 A_1, Int32 A_2) [0x00000] in :0 在 Devart.Data.PostgreSql.x.f () [0x00000] 中:0 在 Devart.Data.PostgreSql.ai.a (Boolean A_0, Boolean A_1, Char A_2, Boolean A_3) [0x00000] in :0 在 Devart.Data.PostgreSql.ai.b (Boolean A_0, Boolean A_1) [0x00000] in :0 在 Devart.Data.PostgreSql.ai.c (Boolean A_0) [0x00000] in :0 在 Devart.Data.PostgreSql.ae.b (Boolean A_0) [0x00000] in :0 在 Devart.Data.PostgreSql.ae.g (Devart.Data.PostgreSql.ac A_0) [0x00000] 在:0 在 Devart.Data.PostgreSql.ae.b (Devart.Data.PostgreSql.ac A_0) [0x00000] 在:0 在 Devart.Data.PostgreSql.ac.af () [0x00000] 在 :0 在 Devart.Data.PostgreSql.PgSqlDataReader.f (Int32 A_0) [0x00000] 在:0 --- 内部异常堆栈跟踪结束 --- 在 System.Data.Entity.Core.EntityClient.Internal.EntityCommandDefinition.ExecuteStoreCommands (System.Data.Entity.Core.EntityClient.EntityCommand entityCommand, CommandBehavior 行为)[0x00000] in :0 在 System.Data.Entity.Core.Objects.Internal.ObjectQueryExecutionPlan.Execute[LisExaminationRequest] (System.Data.Entity.Core.Objects.ObjectContext 上下文, System.Data.Entity.Core.Objects.ObjectParameterCollection parameterValues) [0x00000] in :0
我尝试在连接字符串中尝试超时,但没有帮助。这是DbContext.DataBase.Connection.ConnectionString的内容
User Id=myuser;Host=myhost;Port=5432;Database=mydatabase;Unicode=True;Connection Timeout=300;Default Command Timeout=300;SSLMode=Disable;
这个查询(由EF 生成)非常大。它有超过 6500 行代码(query 不是结果)并由许多 UNION 语句组成。
在PgAdmin 中手动运行相同的查询大约需要 120 秒。
【问题讨论】:
-
连接设置不正确。请检查您是否可以使用这些凭据从该服务器进行连接。
-
@JakubKania 连接设置正常。其他查询工作正常。
-
在这种情况下尝试手动超时连接,如
SELECT pg_sleep(120)并查看错误是否相同。 -
@JakubKania pg_sleep 使用
DbContext.Database.Connection.CreateCommand()调用(与我用于 EF 的上下文相同)工作正常。在我将连接字符串中的超时更改为默认值后 - 它失败并显示正常消息“错误:08006:服务器在指定的超时间隔内没有响应”。 -
因此,如果查询超时错误不同,我仍然认为有问题的查询不是使用相同的连接运行的。
标签: c# entity-framework postgresql devart