У меня проблема с запуском консольного приложения C # через запланированное задание. Запланированное задание вызывает скрипт Powershell, который устанавливает некоторые переменные (например, строку подключения), и вызывает консольное приложение C #, которое подключается к базе данных с этими аргументами.
Проблема в том, что когда запланированное задание запускается триггером времени, в журналах я вижу, что приложение запускается как обычно, пытается выполнить запрос, но завершается неудачно с таймаутом SQl.
Запуск приложения вручную из окна «Запланированные задачи» (щелчок правой кнопкой мыши> «Выполнить») работает нормально, даже через несколько секунд после сбоя при автоматическом запуске. Это поведение настолько согласованно (сработало при сбое, запускается вручную), что я не думаю, что это база данных.
Это также не каталог запуска, права пользователя или различия в аргументах, приложение запускается, просто происходит сбой при доступе к базе данных.
В чем может быть причина такого поведения и как я могу это исправить?
Некоторые настройки задачи:
- Запуск с самыми высокими привилегиями: ON
- Запуск независимо от того, вошел ли пользователь в систему или нет
- Не хранить пароль: OFF
- Учетная запись пользователя совпадает с зарегистрированным пользователем
- Триггер не остановлен при продолжительной работе
- Корректная папка запуска и расположение скрипта (приложение запускается и регистрируется, просто происходит сбой при доступе к базе данных. Ручной щелчок правой кнопкой мыши> Выполнить работает всегда)
трассировка стека ошибок:
System.Data.SqlClient.SqlException (0x80131904): Timeout expired. The timeout period elapsed prior to completion of the operation or the server is not responding. ---> System.ComponentModel.Win32Exception (0x80004005): The wait operation timed out
at System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection, Action`1 wrapCloseInAction)
at System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj, Boolean callerHasConnectionLock, Boolean asyncClose)
at System.Data.SqlClient.TdsParser.TryRun(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj, Boolean& dataReady)
at System.Data.SqlClient.SqlDataReader.TrySetMetaData(_SqlMetaDataSet metaData, Boolean moreInfo)
at System.Data.SqlClient.TdsParser.TryRun(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj, Boolean& dataReady)
at System.Data.SqlClient.SqlDataReader.TryConsumeMetaData()
at System.Data.SqlClient.SqlDataReader.get_MetaData()
at System.Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader ds, RunBehavior runBehavior, String resetOptionsString)
at System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, Boolean async, Int32 timeout, Task& task, Boolean asyncWrite, SqlDataReader ds)
at System.Data.SqlClient.SqlCommand.ExecuteReader(CommandBehavior behavior)
at System.Data.Common.DbCommand.System.Data.IDbCommand.ExecuteReader
Спасибо за вашу помощь!