我构建了一个 ASP.NET MVC Web 服务器,它通过套接字连接到硬件设备。这个想法是生成一个线程来打开套接字并侦听来自硬件的 TCP 包。由于硬件执行一项长时间运行的任务,需要花费大量时间(数年)才能完成,因此我希望尽可能长时间地保持线程处于活动状态,以使用 SignalR 监视进程并将一些数据保存到数据库中。
为了实现这一目标,我创建了一个线程,如下所示:
rs = new TcpListener(IPAddress.Any, PORT_DATA_NUMBER());
rs.Start();
Thread thread = new Thread(() => ListenerHandleConnections(rs));
thread.IsBackground = true;
thread.Start();
线程工作流程如下:
public static void ListenerHandleConnections(TcpListener listener)
{
try
{
TcpClient client;
while (true)
{
try
{
client = listener.AcceptTcpClient();
//extract data and doing some task
}
catch (Exception ex)
{
//Doing some task
}
}
}
catch (Exception ex)
{
//Doing some task
}
}
我面临的问题是,当我将其部署到 IIS 并运行超过 2 小时时,线程被终止,并且没有进程再侦听硬件。这个问题是IIS引起的吗?有解决办法吗?
我已将异常保存到数据库,我得到的只是“线程正在中止。”