sqldependency触发的次数更多

sqldependency触发的次数更多,sql,asp.net,signalr,sqldependency,Sql,Asp.net,Signalr,Sqldependency,您好,我正在尝试使用signalr实现新数据库更改的SQLDependence。但问题是,如果我只编辑一行,那么SQLDependence也会触发更多的时间。有时它不会开火。我有一个没有MVC的web应用程序。下面是我的密码 public void page_load(object sender, EventArgs e) { //notification.GetAllUnreadSalesNotifications(); New

您好,我正在尝试使用signalr实现新数据库更改的SQLDependence。但问题是,如果我只编辑一行,那么SQLDependence也会触发更多的时间。有时它不会开火。我有一个没有MVC的web应用程序。下面是我的密码

 public void page_load(object sender, EventArgs e)
        {
            //notification.GetAllUnreadSalesNotifications();
            NewScrapNotifications();

        }



        public void NewScrapNotifications()
        {


            string message = string.Empty;

            using (SqlConnection connection = new SqlConnection(IFTDAL.IFTCommon.DSN))
            {
                string query = "SELECT [Message] FROM [dbo].[DummyData]";

                using (SqlCommand command = new SqlCommand(query, connection))
                {
                    command.Notification = null;
                    SqlDependency dependency = new SqlDependency(command);
                    dependency.OnChange += new OnChangeEventHandler(dependency_OnChange);
                    connection.Open();
                    SqlDataReader reader = command.ExecuteReader();

                    if (reader.HasRows)
                    {
                        reader.Read();
                        message = reader[0].ToString();
                    }
                }
            }
        }



        private void dependency_OnChange(object sender, SqlNotificationEventArgs e)
        {

            if (e.Type == SqlNotificationType.Change)
            {
                IFTHub nHub = new IFTHub();
                nHub.NotfiyAllClients();
               // NewScrapNotifications();
                //LoadDashboardByDashboardViewID(1);
            }
        }
我在Globa.asax中也有下面的代码

 void Application_Start(object sender, EventArgs e)
            {
                // Code that runs on application startup
                RouteConfig.RegisterRoutes(RouteTable.Routes);
                BundleConfig.RegisterBundles(BundleTable.Bundles);
                SqlDependency.Start(DAL.DSN);

            }
            protected void Application_End(object sender, EventArgs e)
            {
                SqlDependency.Stop(DAL.DSN);
            }

您正在为每个页面加载(刷新)创建新的SQLDependency。我打赌页面重新加载的数量和页面通过信号器接收的通知数量之间存在相关性


每个应用生命周期只注册一次通知…

“每个应用生命周期只注册一次通知”表示我应该在哪里注册?我应该在Application\u Start中注册吗?是的,它工作了,但我必须在dependency\u OnChange中注册我的依赖项。你的意思是每次调用它时都需要在
SqlDependency.OnChange
处理程序中重复注册吗?是的,否则它只会触发一次!那么在这种情况下,我的答案就不那么正确了;)它实际上只触发一次。它解释了为什么代码有时不触发OnChange事件,但它不解释单行更改上的多个事件……当然,除非触发的事件是不同类型的