Запрос PostgreSQL (EF + Devart) не работает в приложении, но работает в PgAdmin

У меня проблема с одним из моих запросов SQL (PostgreSQL), сгенерированных Entity Framework с соединителем 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] в:0 в System.Net.Sockets.NetworkStream.Read (буфер System.Byte[], смещение Int32, размер Int32) [0x00000] в:0 --- конец трассировки стека внутренних исключений --- в System.Net.Sockets.NetworkStream.Read (буфер System.Byte[], смещение Int32, размер Int32) [0x00000] в:0 на Devart.Common.au.a (System.Byte[] A_0, Int32 A_1, Int32 A_2) [0x00000] в:0 --- Конец внутренней трассировки стека исключений --- в Devart.Data.PostgreSql.aa.d (System.Exception A_0) [0x00000] в:0 в Devart.Common.zd (System.Byte[] A_0, Int32 A_1, Int32 A_2) [0x00000] в:0 на Devart.Common.ae.a (System.Byte[] A_0, Int32 A_1, Int32 A_2) [0x00000] в:0 в Devart.Data.PostgreSql.xc (System.Byte[] A_0, Int32 A_1, Int32 A_2) [0x00000] в:0 в Devart.Data. PostgreSql.xf () [0x00000] в:0 в Devart.Data.PostgreSql.ai.a (логическое A_0, логическое A_1, Char A_2, логическое A_3) [0x00000] в:0 в Devart.Data.PostgreSql.ai.b (Boolean A_0, Boolean A_1) [0x00000] в:0 в Devart.Data.PostgreSql.ai.c (Boolean A_0) [0x00000] в:0 в Devart.Data.PostgreSql.ae.b (Boolean A_0) [0x00000] в: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] в:0 в System.Data.Entity.Core.Objects.Internal.ObjectQueryExecutionPlan.Execute[LisExaminationRequest] (System.Data.Entity.Core.Objects.ObjectContext, System.Data.Entity.Core.Objects.ObjectParameterCollection, параметр 0 0). ] в: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] в:0 в System.Net.Sockets.NetworkStream.Read (буфер System.Byte[], смещение Int32, размер Int32) [0x00000] в:0 --- конец трассировки стека внутренних исключений --- в System.Net.Sockets.NetworkStream.Read (буфер System.Byte[], смещение Int32, размер Int32) [0x00000] в:0 на Devart.Common.au.a (System.Byte[] A_0, Int32 A_1, Int32 A_2) [0x00000] в:0 --- Конец внутренней трассировки стека исключений --- в Devart.Data.PostgreSql.aa.d (System.Exception A_0) [0x00000] в:0 в Devart.Common.zd (System.Byte[] A_0, Int32 A_1, Int32 A_2) [0x00000] в:0 на Devart.Common.ae.a (System.Byte[] A_0, Int32 A_1, Int32 A_2) [0x00000] в:0 в Devart.Data.PostgreSql.xc (System.Byte[] A_0, Int32 A_1, Int32 A_2) [0x00000] в:0 в Devart.Data. PostgreSql.xf () [0x00000] в:0 в Devart.Data.PostgreSql.ai.a (логическое A_0, логическое A_1, Char A_2, логическое A_3) [0x00000] в:0 в Devart.Data.PostgreSql.ai.b (Boolean A_0, Boolean A_1) [0x00000] в:0 в Devart.Data.PostgreSql.ai.c (Boolean A_0) [0x00000] в:0 в Devart.Data.PostgreSql.ae.b (Boolean A_0) [0x00000] в: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] в:0 в System.Data.Entity.Core.Objects.Internal.ObjectQueryExecutionPlan.Execute[LisExaminationRequest] (System.Data.Entity.Core.Objects.ObjectContext, System.Data.Entity.Core.Objects.ObjectParameterCollection, параметр 0 0). ] в: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-х годах.

1 ответ

Тайм-аут команды по умолчанию = 300;

Не могли бы вы прислать нам небольшой тестовый проект с соответствующим сценарием DDL / DML для воспроизведения проблемы с игнорированием параметра строки соединения Default Command Timeout?

Другие вопросы по тегам