我目前有一个从旧应用程序更新的数据库。我想利用SQL Service Broker队列,这样当记录被更新时,会在队列中放置一条消息(使用触发器或其他方式)。
然后,我想要一个长时间运行的应用程序(.NET编写的Windows服务),它不断“侦听”队列以获取消息并为另一个应用程序处理它们。
我在网上找到了一些示例代码,只是想获取一些关于代码是否可靠的输入。因此,这里是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 命令的新线程,永远不会超时,这让我有点紧张。