Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/78.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript MVC信号器在每次重新加载时不断增加请求计数_Javascript_Jquery_Asp.net Mvc_Signalr_Sqldependency - Fatal编程技术网

Javascript MVC信号器在每次重新加载时不断增加请求计数

Javascript MVC信号器在每次重新加载时不断增加请求计数,javascript,jquery,asp.net-mvc,signalr,sqldependency,Javascript,Jquery,Asp.net Mvc,Signalr,Sqldependency,我正在创建一个ASP.NET MVC应用程序,它使用“SqlDependecy”和“SignalR”技术来根据数据库更改维护与服务器的实时通信。它只需检查特定数据库记录中的字段值更改,然后将其显示在浏览器上 这一尝试效果很好。但是,当我通过浏览器“网络”性能监视网络请求时,每次刷新页面时,请求计数都会增加1 如图所示 初始页面加载仅发出一个请求 在初始加载后首先刷新,然后db更改将导致发出2个请求 在初始加载后进行第二次刷新,然后更改数据库将导致发出3个请求 等等 下面给出了我尝试过的js代码

我正在创建一个ASP.NET MVC应用程序,它使用“SqlDependecy”和“SignalR”技术来根据数据库更改维护与服务器的实时通信。它只需检查特定数据库记录中的字段值更改,然后将其显示在浏览器上

这一尝试效果很好。但是,当我通过浏览器“网络”性能监视网络请求时,每次刷新页面时,请求计数都会增加1

如图所示

  • 初始页面加载仅发出一个请求
  • 在初始加载后首先刷新,然后db更改将导致发出2个请求
  • 在初始加载后进行第二次刷新,然后更改数据库将导致发出3个请求
  • 等等

    下面给出了我尝试过的js代码

    这对我来说是个问题。如果这是一个真正的问题,任何关于这方面的建议将不胜感激。多谢各位

    
    $(函数(){
    var jHub=$.connection.journeyHub;
    $.connection.hub.start();
    jHub.client.ListenChange=函数(){
    getData();
    }
    jHub.client.ListenChange();
    });
    函数getData(){
    $.ajax({
    url:'GetValue',
    键入:“GET”,
    数据类型:“json”,
    成功:功能(数据){
    如果(数据==“待定”){
    $(“#框”).css({“背景色”:“橙色”});
    }
    else if(数据==“拒绝”){
    $(“#框”).css({“背景色”:“红色”});
    }
    否则如果(数据=“成功”){
    $(“#框”).css({“背景色”:“绿色”});
    }
    }
    });
    }
    

    在我的脑海中,我想说的是,你没有减少你的触发器处理程序,sql依赖触发器只会触发一次,然后它们就消失了,你必须记住删除事件处理程序,或者它们只是继续添加,但是我肯定你能发布你的sql依赖触发器代码

    这是我多年前做的一件事的一个例子,但想法仍然是一样的

    try
            {
                using (
                    var connection =
                        new SqlConnection(ConfigurationManager.ConnectionStrings["DefaultConnection"].ConnectionString))
                {
                    connection.Open();
                    using (SqlCommand command = new SqlCommand(@"SELECT [Id]
                                                                            ,[FName]
                                                                            ,[LName]
                                                                            ,[DOB]
                                                                            ,[Notes]
                                                                            ,[PendingReview] 
                                                           FROM [dbo].[Users]",
                        connection))
                    {
                        // Make sure the command object does not already have
                        // a notification object associated with it.
                        command.Notification = null;
    
                        SqlDependency dependency = new SqlDependency(command);
    
                        dependency.OnChange += new OnChangeEventHandler(dependency_OnChange);
    
                        if (connection.State == ConnectionState.Closed)
                            connection.Open();
    
                        command.ExecuteReader();
                    }
                }
            }
            catch (Exception e)
            {
                throw;
            }
        }
    
    private void dependency_OnChange(object sender, SqlNotificationEventArgs e)
    {   
        SqlDependency dependency = sender as SqlDependency;
        if (dependency != null) dependency.OnChange -= dependency_OnChange;
        //Recall your SQLDependency setup method here.
        SetupDependency();
        JobHub.Show();
    }
    

    我也在考虑这个问题,但我不知道事件处理程序的递减命令放在哪里。我已经用controller类和hub类编辑了案例问题。为什么每次SqlDependency触发时都要启动一个新的hub?您的中心应该已经在运行了。实际上,“Start”只是一个自定义方法,我正在使用它通过中心在客户端上下文中公开服务器端函数。我是通过参考互联网上的许多解决方案得出这一结论的。我仍然对用SqlDependency连接信号器的正确方法感到困惑。我将研究您的建议,并顺便尝试一下……要记住的关键是确保每个SQL依赖项只有一个处理程序,一旦触发依赖项,它将不会再次触发,因此需要确保删除该处理程序。