В настоящее время у меня есть база данных, которая обновляется из устаревшего приложения. Я хотел бы использовать очередь 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, никогда не будет таймаутом - внутри бесконечного цикла - заставляет меня немного нервничать.