ASP.NET Стандартные фоновые задания отменены

#aspnetboilerplate

Вопрос:

Я использую asp.net шаблон и выполнение фонового задания, которое отправляет данные во внешний API. Сообщение выполняется правильно, но фоновое задание по-прежнему оставлено, вместо того чтобы удалить его из таблицы backgroundjobs.

Есть ли способ принудительно выполнить успешное задание и отказаться от него только в случае неудачи?

Код Ниже

 using Abp.Reflection.Extensions;
using EErx.Middleware.RestAPIClient.Dto;
using Erx.Middleware.Configuration;
using Erx.Middleware.Models;
using Erx.Middleware.RestAPIClient.Dto;
using Erx.Middleware.TCPCommunicator.Models;
using Microsoft.Extensions.Configuration;
using RestSharp;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Linq.Dynamic.Core;
using System.Text;

namespace Erx.Middleware.TCPCommunicator.Jobs
{
    public class PDStatusUpdateJob : BackgroundJob<PDUpdateJobArgs>, ITransientDependency
    {
        private readonly Log _log;
        private readonly IConfigurationRoot _appConfiguration;
        private readonly IRepository<DispenseMessageHeader, long> _dispenseMessageHeaderRepository;
        private readonly IRepository<DispenseMessageScript, long> _dispenseMessageScriptRepository;
        private readonly IObjectMapper _objectMapper;

        public PDStatusUpdateJob(
            Log log,
            IRepository<DispenseMessageHeader, long> dispenseMessageHeaderRepository,
            IRepository<DispenseMessageScript, long> dispenseMessageScriptRepository,
            IObjectMapper objectMapper
            )
        {
            _log = log;          
            _dispenseMessageHeaderRepository = dispenseMessageHeaderRepository;
            _dispenseMessageScriptRepository = dispenseMessageScriptRepository;
            _objectMapper = objectMapper;
            _appConfiguration = AppConfigurations.Get(
              typeof(TcpCommunicatorModule).GetAssembly().GetDirectoryPathOrNull()
          );
        }

        [UnitOfWork]
        public override void Execute(PDUpdateJobArgs args)
        {
            try
            {
                var output = new PDDispenseMessageDto();
                var scriptOutput = new List<PDDispenseMessageScriptDto>();

                var headerRecord = _dispenseMessageHeaderRepository.FirstOrDefault(x => x.MessageGuid == args.MessageGuid);

                var dispenseMessage = _objectMapper.Map(headerRecord, output);

                var scripts = _dispenseMessageScriptRepository.GetAllIncluding(p => p.Items).Where(x => x.DispenseMessageHeaderId == headerRecord.Id).ToList();

                dispenseMessage.Scripts = _objectMapper.Map(scripts, scriptOutput);

                var request = new RestRequest(Method.POST);

                var requestMsg = dispenseMessage.ToJsonString(true);

                var client = new RestClient(_appConfiguration.GetValue<string>("PDUpdateAPI"))
                {
                    Timeout = -1,
                    RemoteCertificateValidationCallback = (sender, certificate, chain, sslPolicyErrors) => true
                };

                request.AddHeader("Authorization", "Basic "   GenerateToken());
                request.AddHeader("EntityDescription", "ERX");
                request.AddHeader("Content-Type", "application/json");
                request.AddParameter("application/json; charset=utf-8", requestMsg, ParameterType.RequestBody);

                IRestResponse response = client.Execute(request);

                if (response.ErrorMessage != null)
                {
                    _log.Logger.Error(response.ErrorMessage);
                }
               

            }
            catch (Exception e)
            {
                _log.Logger.Error(e.Message);
            }


        }

        public static string GenerateToken()
        {
            var encoded = Convert.ToBase64String(Encoding.GetEncoding("ISO-8859-1").GetBytes("somestring"));
            return encoded;
        }
    }
}
 

Комментарии:

1. UnitOfWork Атрибут автоматически откатит транзакцию через короткий промежуток времени. Вы на 100% уверены, что метод работает правильно?

2. На самом деле мне не нужна единица работы, так как я не делаю никаких изменений в базе данных. Я уберу это. Я могу подтвердить, что сообщение api завершается правильно.