C# SqlDependency不';除非是第一次,否则别开枪
我正在设置一个依赖项,然后每分钟检查一次该依赖项是否仍然存在,以及HasChanges是否为true 我每分钟都在这样做,因为我很难获得一致的更改通知 当数据库第一次发生更改时,通知就可以正常工作,但即使我重置了依赖项,它也不会再次被触发 注意:我有两台服务器,每台服务器上运行的代码几乎相同。在SQL DB所在的机器上,我没有遇到任何问题。但是在第二台机器上,SQL连接到第一台机器的DB——我只收到一次通知,即使我重置了依赖项 即使我调试并观察HasDependency函数中的变量“dependency”u,我也会看到HasChanges=false,即使我故意更改了表 两台服务器的SqlDependency查询完全相同 有没有人有过类似的问题 EDIT1:我在SQL Server日志中发现此错误: 会话句柄上的查询通知对话框 “{11D06BD6-9CDD-E611-A46F-141877596DFF}。”由于以下原因关闭 错误:'-8490 找不到远程服务'SqlQueryNotificationService-49a0b301-7c6f-439b-bac5-50ec9dfe6922' 因为它不存在 代码: 也许这篇文章是有用的-可能是重复的也许这篇文章是有用的-可能是重复的C# SqlDependency不';除非是第一次,否则别开枪,c#,sqldependency,C#,Sqldependency,我正在设置一个依赖项,然后每分钟检查一次该依赖项是否仍然存在,以及HasChanges是否为true 我每分钟都在这样做,因为我很难获得一致的更改通知 当数据库第一次发生更改时,通知就可以正常工作,但即使我重置了依赖项,它也不会再次被触发 注意:我有两台服务器,每台服务器上运行的代码几乎相同。在SQL DB所在的机器上,我没有遇到任何问题。但是在第二台机器上,SQL连接到第一台机器的DB——我只收到一次通知,即使我重置了依赖项 即使我调试并观察HasDependency函数中的变量“depend
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;
}