我构建了一个 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 引起的吗?有什么解决方案可以解决它吗?
我已将异常保存到数据库,而我得到的只是“线程正在中止”。