Chào mừng đến với Diễn đàn lập trình - Cộng đồng lập trình.
Kết quả 1 đến 2 của 2
  1. #1
    Ngày tham gia
    Sep 2015
    Bài viết
    0

    SignalR và sqlDependency - Lỗi bật ra nhiều thông báo khi thay đổi 1 row trong cơ sở dữ liệu

    Chào các bạn!
    Ai đã làm về thời gian thực giúp mình với !!!
    Mình đang làm về cái thời gian thực trên MVC.
    Dự án có chức năng là: khi một người dùng thêm sửa xóa dữ liệu thì nó sẽ bật ra thông báo cho người dùng khác.
    Mình đã làm bật được ra thông báo, nhưng khi thông báo ra nó bật ra nhiều thông báo 1 lúc (thỉnh thoảng 3 hoặc hơn 3 thông báo, có lúc lên đến hơn 10 thông báo), mà trong csdl mình chỉ thay đổi 1 lần.

    Code của mình đây
    Mã:
    public int getWork()
            {
                int id = 0;
                using (var connection = new SqlConnection(_connString))
                {
                    connection.Open();
                    // Ở đây mình chỉ lấy ra cái ID cuối cùng (vì khi thay đổi dữ liệu thì nó sẽ thêm 1 record vào bảng history)
                    using (var command = new SqlCommand(@"SELECT [ID] FROM [dbo].[Big_HistoryCalendar] ORDER BY [ID] DESC", connection))
                    {
                        command.Notification = null;
    
                        var dependency = new SqlDependency(command);
                        dependency.OnChange += new OnChangeEventHandler(dependency_OnChange1);
    
                        if (connection.State == ConnectionState.Closed)
                            connection.Open();
    
                        var reader = command.ExecuteReader();
                        
                        command.Dispose();
                        reader.Read();
                        id = reader.GetInt32(0);
    
                    }
                    
                }
                return id;
            }
            private void dependency_OnChange(object sender, SqlNotificationEventArgs e)
            {
                bool updated = e.Info == SqlNotificationInfo.Update;
                bool changed = e.Type == SqlNotificationType.Change;
                bool isClient = e.Source == SqlNotificationSource.Data;
    
                bool acceptable = updated && changed && isClient;
    
                if (acceptable)
                {
                    MessagesHub.SendMessages();
                }
            }
    Mình chỉ muốn nó bật ra 1 thông báo duy nhất khi CSDL thay đổi.

    Mình xin cảm ơn trước !!

  2. #2
    Ngày tham gia
    Sep 2015
    Đang ở
    hà nội
    Bài viết
    0
    Đoạn lắng nghe của client thì thế nào?!
    Bật 1 client lên hay nhiều?!
    Đảm bảo dependency_OnChange chạy 1 lần?!
    Đảm bảo 1 client chỉ khởi tạo lắng nghe 1 lần?!

 

 

Quyền viết bài

  • Bạn Không thể gửi Chủ đề mới
  • Bạn Không thể Gửi trả lời
  • Bạn Không thể Gửi file đính kèm
  • Bạn Không thể Sửa bài viết của mình
  •