首页 > 解决方案 > .NET CORE 后台服务意外停止

问题描述

在我的应用程序中,我有一个后台服务,它覆盖了 StartAsync 方法来连接到 VOIP 服务器以连续监听其事件。

此应用程序托管在 IIS 10 (Server1) 上,VOIP 托管在 Centos7 (Server2) 上。

问题是 StartAsync 方法在我浏览 IIS 内的网站之前不起作用,而且它似乎在大约一个小时后停止,我必须再次浏览网站才能启动!

作为提示,此应用程序应该是 SignalR 集线器,因此客户端可以连接到它并获取相关事件以进行进一步操作。

这是作为后台服务监听另一个服务器事件的正确方法吗?或者它可以在更好的解决方案下实施?

    public class PBXEventListener : BackgroundService
    {
        private static AriClient ActionClient = new AriClient(
                    new StasisEndpoint("10.3.3.1", 8088, "asterisk", "asterisk"),
                    "HelloWorld", true);
        private readonly IHubContext<AsteriskHub> _asterHub;
        private readonly IServiceProvider _service;
        private readonly IConfiguration _configuration;
        private ConcurrentDictionary<string, string> _deviceStates = new ConcurrentDictionary<string, string>();

        public PBXEventListener(IHubContext<AsteriskHub> asterHub, IServiceProvider service, IConfiguration configuration)
        {
            _asterHub = asterHub;
            _service = service;
            _configuration = configuration;
        }

        public override Task StartAsync(CancellationToken stoppingToken)
        {
            return Task.Run(() =>
            {
                using (var scope = _service.CreateScope())
                {
                    var callStatRepo = scope.ServiceProvider.GetRequiredService<ICallStatRepository>();
                    _deviceStates = callStatRepo.GetAndSetLastStates();
                }

                ActionClient.OnConnectionStateChanged += ActionClientOnConnectionStateChanged;
                ActionClient.OnDialEvent += ActionClientOnDialEvent;
                ActionClient.OnChannelStateChangeEvent += ActionClientChannelStateChangeEvent;
                ActionClient.OnDeviceStateChangedEvent += ActionClientDeviceStateChangeEvent;

                ActionClient.Connect();

            });
        }
}

标签: c#.net-core.net-5background-service

解决方案


推荐阅读