Я использую sql-зависимость в службе Windows, которая будет отслеживать изменения в таблице учеников.О любых изменениях в таблице учеников следует уведомлять службу Windows, которая будет выполнять свою работу после этого.
Тот же код работает нормально при попытке в веб-приложении даже для нескольких изменений, сделанных в таблице.Но при размещении в качестве службы Windows только первое изменение уведомляется, и последующие изменения не затрагивают службу Windows, когда я пытался присоединить процесс к отладке.
В чем может быть проблема?
protected override void OnStart(string[] args)
{
SqlDependency.Stop(connString);
//Start SqlDependency with application initialization
SqlDependency.Start(connString);
StudentService studentService = new StudentService();
studentService.GetStudentDetails();
}
protected override void OnStop()
{
//Stop SqlDependency
SqlDependency.Stop(connString);
}
public static List<Student> GetStudentRecords()
{
var lstStudentRecords = new List<Student>();
string dbConnectionSettings = ConfigurationManager.ConnectionStrings["DefaultConnection"].ConnectionString;
using (var dbConnection = new SqlConnection(dbConnectionSettings))
{
dbConnection.Open();
var sqlCommandText = @"SELECT [StudentID],[StudentName],[DOB],[Weight] FROM [dbo].[Student]";
using (var sqlCommand = new SqlCommand(sqlCommandText, dbConnection))
{
AddSQLDependency(sqlCommand);
if (dbConnection.State == ConnectionState.Closed)
dbConnection.Open();
var reader = sqlCommand.ExecuteReader();
lstStudentRecords = GetStudentRecords(reader);
}
}
return lstStudentRecords;
}
private static void AddSQLDependency(SqlCommand sqlCommand)
{
sqlCommand.Notification = null;
var dependency = new SqlDependency(sqlCommand);
dependency.OnChange += (sender, sqlNotificationEvents) =>
{
if (sqlNotificationEvents.Type == SqlNotificationType.Change)
{
HitHere(sqlNotificationEvents.Info);
}
};
}