В настоящее время у меня есть база данных, которая обновляется из устаревшего приложения. Я хотел бы использовать очередь SQL Service Broker, чтобы при обновлении записи в очередь помещалось сообщение (с использованием триггера или чего-либо еще).
Мне бы хотелось иметь долго работающее приложение (служба Windows, написанное на .NET), которое постоянно «слушает» очередь, чтобы захватить сообщения и обработать их для другого приложения.
Я нашел несколько примеров кода в Интернете и просто хотел получить некоторую информацию о том, является ли код надежным или нет. Итак, вот сокращенная версия класса обслуживания Windows:
public class MyService
{
public void StartService()
{
Thread listener = new Thread(Listen);
listener.IsBackground = true;
listener.Start();
}
private void Listen()
{
while (true)
{
using (SqlConnection connection = new SqlConnection(_connectionString))
{
string commandText = "WAITFOR ( RECEIVE * FROM MyQueue);";
using (SqlCommand command = new SqlCommand(commandText, connection))
{
connection.Open();
command.CommandTimeout = 0;
SqlDataReader reader = command.ExecuteReader();
while (reader.Read())
{
// Process message
}
}
}
}
}
}
Что ты думаешь? Код работает именно так, как я хочу. Но сама идея выделения нового потока, содержащего команду SQL, никогда не прекратится - внутри бесконечного цикла - заставляет меня немного нервничать.