如何解决.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();
});
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。