除了第一次,SqlDependency不会触发

时间:2017-01-18 17:50:49

标签: c# sqldependency

我正在设置一个依赖项,然后检查依赖项仍然存在并且HasChanges不为真的每一分钟。

我每分钟都这样做,因为我无法获得一致的变更通知。

当数据库发生更改时,通知工作完全正常,但即使我重置了依赖关系,也不会再次触发它。

注意:我有2台服务器,每台服务器上运行的代码几乎相同。在SQL DB所在的机器上,我没有遇到任何问题。但是在SQL连接到第一台机器的DB的第二台机器上 - 即使我重置了依赖项,我也只收到一次通知。

即使我调试并观察变量"依赖"在HasDependency函数中_我看到HasChanges = false即使我故意更改了表格。

两个服务器的SqlDependency查询完全相同。

有没有人有类似的问题?

EDIT1:我在SQL Server日志中发现了这个错误:

  

会话句柄上的查询通知对话框   ' {11D06BD6-9CDD-E611-A46F-141877596DFF}&#39。由于以下原因而关闭       错误:' -8490       找不到远程服务' SqlQueryNotificationService-49a0b301-7c6f-439b-bac5-50ec9dfe6922'   因为它不存在。'。

代码:

   public void WakeUpEveryMinute()
            {
                if (Master.G.OUTPUT) Master.G.OUTMGR.WriteLine("[calcSignal] Checking dependency");
            if (!sqlOMS2.HasDependency())
            {
                if (Master.G.OUTPUT) Master.G.OUTMGR.WriteLine("[calcSignal] Setting dependency");

                sqlOMS2.InitialiseDependency(calcSignalForDepedency);
            }
            return;
        }

    public void InitialiseDependencyWORK(Action onDependencyMethod)
    {
        this.onDependencyMethod = onDependencyMethod;
        SqlDependency.Start(connectionString, null);

        using (SqlCommand command = new SqlCommand("SELECT [Symbol] FROM [" + AccountCode + "].[Orders] WHERE [Status] = 'NEW'",conn))
        {
            Dependency = new SqlDependency(command);
            Dependency.OnChange += new OnChangeEventHandler(OnDependencyChange);
            using (SqlDataReader reader = command.ExecuteReader())
            {
                // Process the DataReader.
            }
        }
    }

    void OnDependencyChange(object sender,   SqlNotificationEventArgs e)
    {
        Console.WriteLine("[OnDependencyChange] " + DateTime.UtcNow.ToString("HH:mm:ss.fff"));
        onDependencyMethod();

    }

    public bool HasDependency()
    {

        if (Dependency == null || Dependency.HasChanges)
            return false;

        return true;
    }

0 个答案:

没有答案