Websocket и signalR не распознают изменение базы данных, даже если код проверяет это? - PullRequest
0 голосов
/ 12 марта 2020

У меня есть контроллер, который обрабатывает эту страницу SmartController.cs

private readonly IProjectRepository _repository;
        public SmartBuildController(IProjectRepository repository)
        {
            _repository = repository;
        }
        public IActionResult Index()
        {
            return View();
        }

        [HttpGet]
        public IActionResult GetBarometric()
        {
            return Ok(_repository.GetAllBarometricPressure());
        }

Далее у меня есть интерфейс в IProjectRepository.cs

 public interface IProjectRepository
    {
        List<barometricpressure> GetAllBarometricPressure();
    }

В моем ProjectRepository.cs вот код Это не срабатывает при изменении значения базы данных

 public List<barometricpressure> GetAllBarometricPressure()
        {
            var barometricpressures = new List<barometricpressure>();
            using(SqlConnection conn = new SqlConnection(connectionString))
            {
                conn.Open();
                SqlDependency.Start(connectionString);
                string cmdText = "select TOP (100)[name],[time],[sensor_number],[sensor_type],[value] from dbo.barometricpressure where time=1556484838716549045";
                SqlCommand cmd = new SqlCommand(cmdText, conn);
                SqlDependency dependency = new SqlDependency(cmd);

                dependency.OnChange += new OnChangeEventHandler(dbChangeNotification);

                if (conn.State == ConnectionState.Closed)
                    conn.Open();
                var reader = cmd.ExecuteReader();

                while (reader.Read())
                {
                    var barometricpressureInfo = new barometricpressure
                    {
                        time = Convert.ToInt64(reader["time"]),
                        name = reader["name"].ToString(),
                        sensor_number = reader["sensor_number"].ToString(),
                        sensor_type = reader["sensor_type"].ToString(),
                        value = (float)Convert.ToDouble(reader["value"])

                    };
                    barometricpressures.Add(barometricpressureInfo);
                }
            }
            return barometricpressures;
        }

        private void dbChangeNotification(object sender, SqlNotificationEventArgs e)
        {
            if (e.Type == SqlNotificationType.Change)
            {
                _context.Clients.All.SendAsync("refreshBarometric");
            }
        }

Внутри у меня также есть конструктор, который обрабатывает строку подключения и мой концентратор для веб-сокета. Я добавил services.AddSignalR () в мои ConfigureServices в startup.cs и направил app.UseSignalR в Configure для сопоставления моего хаба. Я не уверен, почему, когда я добавляю изменение в свою базу данных, код

dependency.OnChange += new OnChangeEventHandler(dbChangeNotification);

не срабатывает и не обнаруживает это изменение? Любая помощь будет оценена!

...