現在、レガシー アプリケーションから更新されるデータベースがあります。SQL Service Broker キューを利用して、レコードが更新されたときにメッセージが (トリガーなどを使用して) キューに入れられるようにしたいと考えています。
次に、キューを常に「リッスン」してメッセージを取得し、別のアプリケーションのために処理する、長時間実行されるアプリケーション (.NET で記述された Windows サービス) が必要です。
Web でサンプル コードを見つけたので、そのコードがしっかりしているかどうかについて意見を求めました。したがって、これは 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 コマンドを含む新しいスレッドをスピンオフするという考えは、無限ループ内でタイムアウトすることはありません。私は少し神経質になります。