Исключение тайм-аута транзакции БД в WCF ⇐ C#
-
Anonymous
Исключение тайм-аута транзакции БД в WCF
Я вызываю WCF из своего кода C# в асинхронном режиме (используя isOneway = true), а WCF, в свою очередь, использует Entity Framework для выполнения операций с БД с помощью шаблона репозитория.
WCF требуется больше времени для обработки (т. е. сохранения файлов в нужном месте) около 4 минут, и после этого я получаю сообщение об ошибке.
System.Data.Entity.Core.UpdateException: произошла ошибка при обновлении записей. Подробности смотрите во внутреннем исключении. ---> System.InvalidOperationException: транзакция, связанная с текущим соединением, завершена, но не удалена. Транзакция должна быть удалена до того, как соединение можно будет использовать для выполнения операторов SQL. at System.Data.SqlClient.TdsParser.TdsExecuteRPC(SqlCommand cmd, _SqlRPC[] rpcArray, Int32 timeout, Boolean inSchema, SqlNotificationRequest NotificationRequest, TdsParserStateObject stateObj, Boolean isCommandProc, Логическая синхронизация, завершение TaskCompletionSource`1, Int32 startRpc, Int32 startParam)
Я предполагаю, что эта ошибка связана с тайм-аутом WCF. Я здесь?
Однако в Entity Framework я уже установил таймаут на 60 минут, используя -
((IObjectContextAdapter)this).ObjectContext.CommandTimeout Если это из-за тайм-аута WCF, нужно ли мне исправить это, используя тайм-аут службы в web.config или каким-либо другим способом?
Код метода WCF, выполняющего операцию -
[OperationContract(IsOneWay = true)] void RequestForBulkPrint (Guid orderId); Реализация этого метода в SVC -
public void RequestForBulkPrint (Guid orderId) { пытаться { _logger.Info("RequestForBulkPrint запущен"); RfDownloadService.DownloadBulkRfs(orderId); //Это мой метод Dll _logger.Info("RequestForBulkPrint завершен"); } поймать (Исключение ex) { _logger.Error(ex, «В методе RequestForBulkPrint произошла ошибка»); } } DownloadBulkRfs этот метод выполняет длительную обработку файлов, т. е. загружает файлы и сохраняет путь к файлу в БД с помощью Entity Framework, поэтому, если количество файлов мало, он будет обрабатываться и не выдавать никаких ошибок, но если счетчик большой, то я получаю сообщение об ошибке. Поэтому я предположил, что это из-за TimeOut, когда я также гуглил, они сказали увеличить время ожидания.
Web.config WCF -
//Пробовал, но безуспешно
Я вызываю WCF из своего кода C# в асинхронном режиме (используя isOneway = true), а WCF, в свою очередь, использует Entity Framework для выполнения операций с БД с помощью шаблона репозитория.
WCF требуется больше времени для обработки (т. е. сохранения файлов в нужном месте) около 4 минут, и после этого я получаю сообщение об ошибке.
System.Data.Entity.Core.UpdateException: произошла ошибка при обновлении записей. Подробности смотрите во внутреннем исключении. ---> System.InvalidOperationException: транзакция, связанная с текущим соединением, завершена, но не удалена. Транзакция должна быть удалена до того, как соединение можно будет использовать для выполнения операторов SQL. at System.Data.SqlClient.TdsParser.TdsExecuteRPC(SqlCommand cmd, _SqlRPC[] rpcArray, Int32 timeout, Boolean inSchema, SqlNotificationRequest NotificationRequest, TdsParserStateObject stateObj, Boolean isCommandProc, Логическая синхронизация, завершение TaskCompletionSource`1, Int32 startRpc, Int32 startParam)
Я предполагаю, что эта ошибка связана с тайм-аутом WCF. Я здесь?
Однако в Entity Framework я уже установил таймаут на 60 минут, используя -
((IObjectContextAdapter)this).ObjectContext.CommandTimeout Если это из-за тайм-аута WCF, нужно ли мне исправить это, используя тайм-аут службы в web.config или каким-либо другим способом?
Код метода WCF, выполняющего операцию -
[OperationContract(IsOneWay = true)] void RequestForBulkPrint (Guid orderId); Реализация этого метода в SVC -
public void RequestForBulkPrint (Guid orderId) { пытаться { _logger.Info("RequestForBulkPrint запущен"); RfDownloadService.DownloadBulkRfs(orderId); //Это мой метод Dll _logger.Info("RequestForBulkPrint завершен"); } поймать (Исключение ex) { _logger.Error(ex, «В методе RequestForBulkPrint произошла ошибка»); } } DownloadBulkRfs этот метод выполняет длительную обработку файлов, т. е. загружает файлы и сохраняет путь к файлу в БД с помощью Entity Framework, поэтому, если количество файлов мало, он будет обрабатываться и не выдавать никаких ошибок, но если счетчик большой, то я получаю сообщение об ошибке. Поэтому я предположил, что это из-за TimeOut, когда я также гуглил, они сказали увеличить время ожидания.
Web.config WCF -
//Пробовал, но безуспешно
Мобильная версия