我正在尝试在SQL Server 2012上运行查询通知。我在此链接上关注了教程:http://www.codeproject.com/Articles/144344/Query-Notification-using-SqlDependency-and-SqlCach
我最终得到的是OnChange事件不断被解雇。 SqlNotificationEventArgs表示Info = Invalid,Source = Statement,Type = Subscribe。
从我的研究中,我发现订阅时遇到了问题,但我无法弄清楚原因。在SQL Server事件日志中,我得到的只是
The query notification dialog on conversation handle '{D30D3675-9A2F-E311-A141-8851FB594FAA}.' closed due to the following error:
'<?xml version="1.0"?><Error xmlns="http://schemas.microsoft.com/SQL/ServiceBroker/Error"><Code>-8470</Code><Description>Remote service has been dropped.</Description></Error>'.
我已经解决了常见的问题,比如确保我使用的是两部分表名,并且我的查询没有做任何禁止的事情。以下是设置事件的代码:
public DataTable RegisterDependency()
{
this.CurrentCommand =
new SqlCommand("Select CategoryID,CategoryName,Description from dbo.[Categories]", this.CurrentConnection);
this.CurrentCommand.Notification = null;
SqlDependency dependency = new SqlDependency(this.CurrentCommand);
dependency.OnChange += this.dependency_OnChange;
if (this.CurrentConnection.State == ConnectionState.Closed)
this.CurrentConnection.Open();
try
{
DataTable dt = new DataTable();
dt.Load(this.CurrentCommand.ExecuteReader(CommandBehavior.CloseConnection));
return dt;
}
catch { return null; }
}
我不知道接下来要检查什么。任何帮助表示赞赏。
答案 0 :(得分:0)
原来问题在于表定义。 “描述”列是“ntext”类型,不适用于通知。
答案 1 :(得分:0)
为未来的读者。
Closed event notification conversation endpoint with handle '{ABC123}', due to the following error: '<?xml version="1.0"?><Error xmlns="http://schemas.microsoft.com/SQL/ServiceBroker/Error"><Code>-8470</Code><Description>Remote service has been dropped.</Description></Error>'.
当我的<NotificationService><ConnectionString>
与我的<ApplicationService><OnNotification>
数据库连接值不匹配时,出现此错误。 (一个小错字,但足以把它扔掉)