长时间运行的后台线程在 ASP.NET 中终止

问题描述 投票:0回答:1

我构建了一个 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引起的吗?有解决办法吗?

我已将异常保存到数据库,我得到的只是“线程正在中止。”

asp.net-mvc multithreading sockets iis long-running-processes
1个回答
© www.soinside.com 2019 - 2024. All rights reserved.