Вызов метода с кварцевым планировщиком для создания ACH-файла с использованием ChoNacha дает исключение

Я хочу автоматически генерировать ACH-файлы с помощью планировщика. Вызов планировщика дает мне исключение, тогда как при прямом вызове с URL я не реализовал следующий код для создания файлов ACH.

    //scheduler job
    Task IJob.Execute(IJobExecutionContext context)
    {
        SchedularMethodsController obj = new SchedularMethodsController();
        var T = Task.Run(() => obj.AchFileGenerator(DateTime.Now));\
        T.Wait();
        return T;
    }

метод генерации и записи ACH-файла следующий:

public void AchFileGenerator(DateTime Dt)
        {
            ChoNACHAConfiguration config = new ChoNACHAConfiguration();
            config.DestinationBankRoutingNumber = "999999999";
            config.OriginatingCompanyId = "7999999999";
            config.DestinationBankName = ("PNC Bank").ToUpper();
            config.OriginatingCompanyName = ("automatecondominium").ToUpper();
            config.ReferenceCode = ("mgmt").ToUpper();
            config.BlockingFactor = 10;
            var unitowners = Achbll.GetUnitOwnerPaymentList(Dt).ToList();
            var FileName = "ACH_" + ((DateTime.Now.ToString()).Replace(" ", "_").Replace(":", "_")) + ".txt";
            var backpath = "CondoDocuments\\DocumentLibrary\\" + FileName;
            var path = HttpRuntime.AppDomainAppPath + backpath;

            using (var fs = System.IO.File.Create(path))
            {
                fs.Close();
                fs.Dispose();
            }

            try
            {
                using (var nachaWriter = new ChoNACHAWriter(path, config))
                { 

                    using (var bw2 = nachaWriter.CreateBatch(200, "PPD", "DIR DEBIT", DateTime.Now, DateTime.Now.AddDays(1), null, null, '1', null, null))
                    {
                        foreach (var owner in unitowners)
                        {
                            if (!string.IsNullOrEmpty(owner.AccountNo) && !string.IsNullOrEmpty(owner.BankRoutingCode))
                            {

                                var UA = Cipher.decrypt(owner.AccountNo);
                                var BR = Cipher.decrypt(owner.BankRoutingCode);
                                var Name = owner.UnitOwnerName.Split(' ');
                                if (Name.Length > 1)
                                {
                                    using (var entry = bw2.CreateDebitEntryDetail(27, BR.ToString(), UA.ToString(), 779, " 18H00A " + owner.UnitNo.ToString(), (Name[1] + ", " + Name[0]).ToUpper().ToString()))
                                    {
                                        //entry.CheckDigit = '0';

                                    }
                                }
                                else
                                {
                                    using (var entry = bw2.CreateDebitEntryDetail(27, BR.ToString(), UA.ToString(), 779, " 18H00B " + owner.UnitNo.ToString(), (Name[0]).ToUpper().ToString()))
                                    {
                                        //entry.CheckDigit = '0';

                                    }
                                }

                            }
                        }
                    }
                }
            }
            catch (Exception ex)
            {
            }

        }

Это мой вызов планировщика в global.asax:

   protected void Application_Start()
        {
            Invoker ob = new Invoker();
            ob.StartScheduling();

            AreaRegistration.RegisterAllAreas();
            FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
            RouteConfig.RegisterRoutes(RouteTable.Routes);
            BundleConfig.RegisterBundles(BundleTable.Bundles);

        }

Job invoke class:-

 public async void StartScheduling()
        {
            // construct a scheduler factory
            NameValueCollection props = new NameValueCollection
            {
                { "quartz.serializer.type", "binary" }
            };

            StdSchedulerFactory factory = new StdSchedulerFactory(props);
            IScheduler scheduler = await factory.GetScheduler();
            await scheduler.Start();

            IJobDetail job = JobBuilder.Create<ExecutableJobs>()
                            .WithIdentity("myJob", "group1") // name "myJob", group "group1"
                            .Build();

            var start = DateTime.Now.AddMinutes(1);
            ITrigger trigger = TriggerBuilder.Create()
                        .WithIdentity("trigger3", "group1")
                        //.StartAt(start) // if a start time is not given (if this line were omitted), "now" is implied
                        .WithSimpleSchedule(x => x
                            .WithIntervalInMinutes(1).
                            RepeatForever())
                        .ForJob(job)
                        .Build();

            await scheduler.ScheduleJob(job, trigger);
        }

Исключение, которое я получаю:

1) Информация об исключении **************************************************** Тип: System.TypeInitializationException TypeName: ChoETL.ChoAppSettings Сообщение: инициализатор типа для ChoETL.ChoAppSettings вызвал исключение. Данные: System.Collections.ListDictionaryInternal TargetSite: System.String GetValue(System.String, System.String, Boolean) HelpLink: NULL Источник: ChoETL HResult: -2146233036

Информация StackTrace **************************************************** на ChoETL.ChoAppSettings.GetValue(строковый ключ, String defaultValue, логическое saveDefaultValue) в ChoETL.ChoETLFramework.GetConfigValue(строковый ключ, String defaultValue) в ChoETL.ChoETLFramework.GetConfigValue[ключ по умолчанию.

2) Информация об исключении **************************************************** Тип: System.ArgumentException Сообщение: exePath должно быть указано, если оно не запущено внутри отдельного exe-файла. ParamName: NULL Data: System.Collections.ListDictionaryInternal TargetSite: System.Configuration.Configuration OpenExeConfigurationImpl(System.Configuration.ConfigurationFileMap, логическое значение, System.Configuration.ConfigurationUserLevel, System.String, логическое значение) 2147024809

Информация StackTrace **************************************************** в Системе.Configuration.ConfigurationManager.OpenExeConfigurationImpl(файл-карты ConfigurationFileMap, логический isMachine, ConfigurationUserLevel userLevel, String exePath, логический preLoad) в System.Configuration.ConfigurationManager.OpenExeConfiguration(String exePath..hoppC) (ChoPL). В ChoCet


1 ответ

Решение

Кажется, ошибка в библиотеке ChoETL. Будет исправлена ​​и выпущена на следующей версии.

В то же время, пожалуйста, сделайте, как показано ниже, чтобы преодолеть эту проблему

public void AchFileGenerator(DateTime Dt)
{
    //Set this flag to fix the issue
    ChoETLFrxBootstrap.IsSandboxEnvironment = true;


    ChoNACHAConfiguration config = new ChoNACHAConfiguration();
    config.DestinationBankRoutingNumber = "999999999";
    config.OriginatingCompanyId = "7999999999";

.....

}

ОБНОВИТЬ:

Пожалуйста, установите последний пакет Nuget ChoETL (v1.0.8.4).

Дай мне знать.

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