SqlDependency 和 asp.net mvc 应用程序未完全运行

SqlDependency and asp.net mvc application not fully working

关于在普通 Asp.net MVC 应用程序中使用 SqlDependency class 我有奇怪的问题和疑问

我有标准控制器,代码为:

    public ActionResult Index()
    {
        RegisterNotification();
        return View();
    }

    public void RegisterNotification()
    {
        var cs = ConfigurationManager.ConnectionStrings["TestDb"].ConnectionString;
        var sql = @"Select Data From dbo.TestTable"; 
        using (var conn = new SqlConnection(cs))
        {
            conn.Open();
            using (var cmd = new SqlCommand(sql, conn))
            {
                cmd.Notification = null;
                var sqlDependency = new SqlDependency(cmd);
                sqlDependency.OnChange += SqlDependency_OnChange;
                cmd.ExecuteNonQuery();
            }
        }

    }

    public void SqlDependency_OnChange(object sender, SqlNotificationEventArgs e)
    {
        if (e.Type == SqlNotificationType.Change)
        {
            // call some SignalR method here and re-register notification
            RegisterNotification();
        }
    }

Global.asax 中是 SqlDepndency 初始化(在开始和结束方法上)

好吧,在第一个请求中一切正常,但是在一些刷新(完整请求)之后 SqlDependency_OnChange 调用两次,下一次刷新调用四次等等

在控制台应用程序中,这段代码工作正常。

我的代码有问题吗?

(使用 Sql 2012 和 asp.net MVC 5.2.3 和 VisualStudio IISExpress 开发服务器)

谢谢

我想您要做的是创建一个单例来处理 SqlDependency 通知。每次有人发出请求时,都会创建一个控制器的新实例,它会注册新的通知。当您收到多个通知时,我想您会发现收到通知的是控制器的不同实例。

有一个很好的例子 here