SQLDependency times out



当我的SQL Server表在我的WPF应用程序中更改时,我试图获得通知,大约20秒后,我得到一个超时过期的异常,然后是

数据库中已经存在一个名为'SqlQueryNotificationStoredProcedure-{random id}'的对象。

之后我得到这个:

找不到存储过程'SqlQueryNotificationStoredProcedure-{…}'。
找不到队列SqlQueryNotificationService-{…}',因为它不存在或您没有权限。
无效的对象名称'SqlQueryNotificationService-{…}'

然后:

会话句柄"{id…}"没有找到。
对话句柄"{id…}">

大多数情况下只有超时和'已经有一个对象命名为..'异常显示,然后,如果我忽略这些异常并继续,SqlDependency仍然工作良好之后,我也试过SqlTableDependency,但我不能得到工作,我超级迷路了…我真的很感激任何帮助!

SqlDependency的代码:

public static void StartDependency()
{
using (var dbconn = new SqlConnection(ConnStr))
{
dbconn.Open();
using (SqlCommand command = new SqlCommand(*my select command*, dbconn))
{
SqlDependency dependency = new SqlDependency(command);
dependency.OnChange += new OnChangeEventHandler(OnDependencyChange);
using (SqlDataReader reader = command.ExecuteReader())
{
}
}
}
}
private static void OnDependencyChange(object sender, SqlNotificationEventArgs e)
{
SqlDependency dependency = sender as SqlDependency;
dependency.OnChange -= OnDependencyChange;
Console.WriteLine(e.Source);
Console.WriteLine(e.Info);
Console.WriteLine(e.Type);
StartDependency();
}

在启动时我这样做:

SqlDependency.Start(ConnStr);
AppDomain.CurrentDomain.UnhandledException += (s, e) => { SqlDependency.Stop(ConnStr); };
Application.Current.MainWindow.Closing += (s, e) => { SqlDependency.Stop(ConnStr); };
StartDependency();

编辑:即使我不调用'SQLDependency.Stop(ConnStr)'上的UnhandledException,它仍然抛出相同的异常,我使用的是最新的System.Data.SqlClient上。

我最终使用了SqlDependencyEx,它开箱即用!我注意到它显式地将超时设置为60000秒,所以也许这也有助于SqlDependency,但据我所知,我不应该需要设置这样的东西。

最新更新