c# - .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();
});
}
}
解决方案
推荐阅读
- postgresql - PostgreSQL 功能:捕获异常并在 LOOP 中执行下一步
- django - Django 通道:数据进入错误的套接字
- javascript - javascript 为多个事件添加单个事件列表器,例如 ajax 函数回调成功、失败等
- sql - 复制每个条目的所有列选项
- python - 数组秩变换给出了意想不到的结果
- android - React Native Image Picker 使用什么图像压缩算法?
- .htaccess - 创建不包括在查询字符串之前或在 htaaccess 中的文件名末尾添加斜杠的重写
- python - 如何通过在 Tkinter 中按下两个图像的下一个和上一个按钮来更改两个并排的图像
- python - encodUnicodeEncodeError: 'charmap' 同时抓取
- python - 没有循环的Python任务子字符串