Eu construí um servidor web ASP.NET MVC que se conecta a um dispositivo de hardware por meio de um soquete. A ideia é gerar um thread que abra um soquete e escute pacotes TCP do hardware. Como o hardware executa uma tarefa de longa duração que leva um tempo significativo para ser concluída (anos), quero manter o thread ativo o maior tempo possível para monitorar o processo usando SignalR e salvar alguns dados no banco de dados.
Para conseguir isso, criei um tópico como segue:
rs = new TcpListener(IPAddress.Any, PORT_DATA_NUMBER());
rs.Start();
Thread thread = new Thread(() => ListenerHandleConnections(rs));
thread.IsBackground = true;
thread.Start();
O fluxo de trabalho do thread é o seguinte:
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
}
}
O problema que estou enfrentando é que quando eu implanto isso no IIS e o executo por mais de 2 horas, o thread é eliminado e nenhum processo escuta mais o hardware. Esse problema é causado pelo IIS e há alguma solução para corrigi-lo?
Salvei a exceção no banco de dados e tudo que obtive foi "Thread estava sendo abortado".