Mam obecnie bazę danych, która jest aktualizowana ze starszej aplikacji. Chciałbym użyć kolejki SQL Service Broker, aby po aktualizacji rekordu komunikat był umieszczany w kolejce (przy użyciu wyzwalacza lub czegoś podobnego).Usługa SQL Service Broker i .NET Windows Service - najlepsze praktyki?
Chciałbym wtedy mieć długo działającą aplikację (usługę Windows napisaną w .NET), która ciągle "nasłuchuje" kolejki, aby pobrać wiadomości i przetworzyć je dla innej aplikacji.
Znalazłem przykładowy kod w sieci i chciałem tylko uzyskać pewne informacje, czy kod jest solidny, czy nie. Oto skrócona wersja klasy usługi 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
}
}
}
}
}
}
Co sądzisz? Kod działa dokładnie tak, jak tego chcę. Ale pomysł wyrzucenia nowego wątku zawierającego polecenie SQL nigdy się nie skończy - w nieskończonej pętli - trochę mnie to denerwuje.