Tôi hiện có cơ sở dữ liệu được cập nhật từ ứng dụng cũ. Tôi muốn sử dụng hàng đợi của Nhà môi giới dịch vụ SQL để khi một bản ghi được cập nhật, một thông điệp được đặt trong hàng đợi (sử dụng một kích hoạt hoặc một cái gì đó).Nhà môi giới dịch vụ SQL và Dịch vụ Windows .NET - Các phương pháp hay nhất?
Sau đó tôi muốn có một ứng dụng chạy dài (dịch vụ Windows được viết bằng .NET) liên tục "nghe" hàng đợi để lấy các thông điệp và xử lý chúng cho một ứng dụng khác.
Tôi đã tìm thấy một số mã mẫu trên web và chỉ muốn nhận được một số thông tin đầu vào về việc mã có vững chắc hay không. Vì vậy, đây là phiên bản rút gọn của lớp dịch vụ 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
}
}
}
}
}
}
Bạn nghĩ sao? Mã hoạt động chính xác theo cách tôi muốn. Nhưng ý tưởng xoay vòng một luồng mới có chứa một lệnh SQL sẽ không bao giờ hết thời gian - bên trong một vòng lặp vô hạn - làm cho tôi hơi lo lắng.