Проблема при запуске пакета SSIS из службы Windows

#windows-services #ssis #windows-server-2008

#windows-службы #ssis #windows-server-2008

Вопрос:

Я создал службу Windows, которая выполняет пакет SSIS каждые пять минут. Это работает довольно хорошо, но что-то сбивает его с толку.

Каждую неделю сервер перезапускается, и после перезапуска Служба перестает работать. События для запуска / завершения выполнения пакета SSIS по-прежнему отображаются в средстве просмотра событий, но пакет работает не так, как должен. Когда я вручную запускаю / останавливаю службу, все снова работает в обычном режиме.

Я что-то упускаю из виду, что я должен делать с Pacakge ?

Я использую веб-сервис, чтобы получить местоположение пакета SSIS. Я удалил большую часть этого из приведенного ниже кода, но оставил достаточно, чтобы структура моей службы была сохранена.

Вот суть моего кода:

 namespace MyService
{
    partial class MyService : ServiceBase
    {
        private Timer timer;
        private Package pkg;
        bool executing;

        public MyService()
        {
            InitializeComponent();
        }

        protected override void OnStart(string[] args)
        {
            executing = false;
            TimerCallback callback = new TimerCallback(Init);
            int period = 1000 * 60; //attempt to initialize every minute.
            timer = new Timer(callback, null, 0, period);
        }


        private void Init(object state)
        {
            try
            {
                //Get `timeIntervalMinutes` from Parameters table
                string mySQLStatement = "...";
                DataSet ds = mySQLQuery(...);
                int timeIntervalMinutes = Convert.ToInt32(ds.Tables["timeIntervalMinutes"].Rows[0]["Value"]);

                //Get `path` from Parameters table
                string mySQLStatement = "...";
                DataSet ds = mySQLQuery(...);
                string path = Convert.ToString(ds.Tables["path"].Rows[0]["Value"]);

                //Get `path` from Parameters table
                string mySQLStatement = "...";
                DataSet ds = mySQLQuery(...);
                string server = Convert.ToString(ds.Tables["server"].Rows[0]["Value"]);

                //Load the SSIS Package
                Application app = new Application();
                pkg = app.LoadFromDtsServer(path, server, null);

                //If this line is reached, a connection to MyWS has been made, so switch the timer to run the SSIS package
                timer.Dispose();
                TimerCallback callback = new TimerCallback(OnTimedEvent);
                int period = 1000 * 60 * timeIntervalMinutes;
                timer = new Timer(callback, null, 0, period);
            }
            catch (Exception e)
            {
                return;
            }
        }


        private void OnTimedEvent(object state)
        {
            if (!executing)
            {
                executing = true;
                DTSExecResult pkgResults = pkg.Execute();
                executing = false;
            }
        }

        protected override void OnStop()
        {

        }

        //<MyWS is here>

    }
}
  

Спасибо за помощь!

Ответ №1:

Возможно, ваша служба или процесс зависят от другой службы — скажем, MSDTC. ЕСЛИ эта служба не будет готова так быстро после запуска, вы можете получить непредсказуемые результаты. Либо отложите запуск вашей службы, либо выясните зависимость и установите ее в свойствах службы