SqlDependency в службе Windows запускается только впервые - PullRequest
0 голосов
/ 22 ноября 2018

Я использую 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); 
        }
    };
}
...