我正在设置一个依赖项,然后检查依赖项仍然存在并且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;
}