Ich habe derzeit eine Datenbank, die von einer Legacy-Anwendung aktualisiert wird. Ich möchte eine SQL Service Broker-Warteschlange verwenden, so dass beim Aktualisieren eines Datensatzes eine Nachricht in die Warteschlange gestellt wird (mit einem Trigger oder etwas).SQL Service Broker und .NET Windows Service - Best Practices?
Ich hätte dann gerne eine lange laufende Anwendung (Windows-Dienst in .NET geschrieben), die ständig auf die Warteschlange "hört", um die Nachrichten zu greifen und sie für eine andere Anwendung zu verarbeiten.
Ich habe einige Beispielcode im Web gefunden, und wollte nur eine Eingabe erhalten, ob der Code fest ist oder nicht. Also, hier ist eine abgekürzte Version der Windows-Service-Klasse:
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
}
}
}
}
}
}
Was denken Sie? Der Code funktioniert genau so, wie ich es möchte. Aber die Idee, einen neuen Thread, der einen SQL-Befehl enthält, auszuwerfen, wird nie auslaufen - innerhalb einer Endlosschleife - macht mich etwas nervös.