C# 捕获服务结构事件

C# 捕获服务结构事件,c#,azure-service-fabric,C#,Azure Service Fabric,我有一个处理下载请求的无状态服务结构。每个请求在数据库中持久化,并具有一个状态(输入、完成、待创建、错误) 我想在以下时间将所有请求状态从“输入”更新为“待创建”: -重新启动服务或特定节点。 -发布/升级服务 当服务重新启动时,我重写了OnCloseAsync方法,但我不知道在特定节点重新启动或服务发布时触发了哪个事件 using Abp.Boilerplate.Dependency; using Abp.Boilerplate.Events.Bus; using Boilerplate.Se

我有一个处理下载请求的无状态服务结构。每个请求在数据库中持久化,并具有一个状态(输入、完成、待创建、错误)

我想在以下时间将所有请求状态从“输入”更新为“待创建”:
-重新启动服务或特定节点。
-发布/升级服务

当服务重新启动时,我重写了OnCloseAsync方法,但我不知道在特定节点重新启动或服务发布时触发了哪个事件

using Abp.Boilerplate.Dependency;
using Abp.Boilerplate.Events.Bus;
using Boilerplate.ServiceFabric.Common;
using Microsoft.ServiceFabric.Services.Runtime;
using Microsoft.ServiceFabric.Services.Communication.Runtime;
using System.Collections.Generic;
using System.Fabric;
using System.Threading;
using System.Threading.Tasks;
using System;
using FM.ReportingService.Api.Application.Shared.Contracts.Repositories;
using System.Runtime.Remoting.Contexts;

namespace FM.ReportingService.Api
{
    /// <summary>
    /// The FabricRuntime creates an instance of this class for each service type instance. 
    /// </summary>
    internal sealed class ReportingService : StatelessService
    {
        public ReportingService(StatelessServiceContext context) : base(context)
        {
            IocManager.Instance.IsRegistered<IEventBus>(); // /!\ Hack to initialize IocManager.Instance first
        }

        /// <summary>
        /// Optional override to create listeners (like tcp, http) for this service instance.
        /// </summary>
        /// <returns>The collection of listeners.</returns>
        protected override IEnumerable<ServiceInstanceListener> CreateServiceInstanceListeners()
        {
            // Create aspnet core listner
            yield return ServiceInstanceListenerFactory.CreateExternalListener(
                typeof(Startup),
                (serviceContext, message) => ServiceEventSource.Current.ServiceMessage(serviceContext, message));
        }
        protected override void OnAbort()
        {
            RenewPendingRequests().Wait();
        }
        protected override async Task OnCloseAsync(CancellationToken cancellationToken)
        {
           await RenewPendingRequests();
        }

        /// <inheritdoc />
        private async Task RenewPendingRequests()
        {
            //var exportRepo = IocManager.Instance.IocContainer.Resolve<IExportRepository>();
            //await exportRepo.RenewPendingRequests();
            await EventBus.Default.TriggerAsync(new Application.Shared.Models.CloseAppEventData { TaskId = 42 });

        }
        protected override async Task RunAsync(CancellationToken cancellationToken)
        {
            while (true)
            {
                if (cancellationToken.IsCancellationRequested)
                {
                    await RenewPendingRequests();
                    return;
                }
            }

        }

    }

}

您是否需要知道停机背后的原因,或者有一个公共场所来处理服务停机是否足够?如果您仍然需要答案,您能否回答上述问题?
public async Task RenewPendingRequests()
        {
            async Task process()
            {

                var pendingRequests = _exportDbContext.Exports.Where(exportEntity => exportEntity.Status == ExportStatus.InProgress && exportEntity.SfInstanceId == _serviceFabricConfig.SfInstanceId)?.ToList();
                pendingRequests.ForEach(req =>
                {
                    req.Status = ExportStatus.New;
                    req.LastModificationTime = Clock.Now;
                    _exportDbContext.Update(req);
                });
                await _exportDbContext.SaveChangesAsync();
            };
            await TryCatchHelper.TrackTryCatchFinally(process, Wellknown.AppInsights.DependencyTypes.Sql, AppConsts.AppInsights.SqlServerFMReportingServicesDbDependency, nameof(GetNotTreateds), _ai);
        }