SqlDependency 不工作 mvc 应用程序。命中一次
SqlDependency not working mvc app. Hits once
我正在关注博客 http://www.venkatbaggu.com/signalr-database-update-notifications-asp-net-mvc-usiing-sql-dependency/ 以将 signalR 推送消息发送到已连接的客户端。
我的调试器从不触发 onchange 事件。
我的Global.asax.cs:
string connString = ConfigurationManager.ConnectionStrings["DefaultConnection"].ConnectionString;
protected void Application_Start()
{
// basic stuff
SqlDependency.Start(connString);
var repo = new Repositories.MarkerRepository();
repo.GetAllMarkers(); // to register the dependency
}
我的MarkerRepository.cs:
readonly string _connString = ConfigurationManager.ConnectionStrings["DefaultConnection"].ConnectionString;
private MarkersHub _mh = new MarkersHub(); // my signalr hub class
public IEnumerable<House> GetAllMarkers()
{
var markers = new List<House>();
using (var connection = new SqlConnection(_connString))
{
connection.Open();
using (var command = new SqlCommand(@"SELECT * FROM [dbo].Houses", connection))
{
command.Notification = null;
var dependency = new SqlDependency(command);
dependency.OnChange += new OnChangeEventHandler(dependency_OnChange);
if (connection.State == ConnectionState.Closed)
connection.Open();
var reader = command.ExecuteReader();
while (reader.Read())
{
markers.Add(item: new House {
ID = (int)reader["ID"],
Name = (string)reader["Name"],
Code = reader["Code"] != DBNull.Value ? (string)reader["Code"] : "",
Latitude = Convert.ToDouble(reader["Latitude"]),
Longitude = Convert.ToDouble(reader["Longitude"])
});
}
}
}
return markers;
}
private void dependency_OnChange(object sender, SqlNotificationEventArgs e)
{
if (e.Type == SqlNotificationType.Change)
{
_mh.SendMarkers();
}
}
我点击过一次,但没有变化,只是一个订阅通知。我已经阅读了很多关于重新订阅的内容,但是当它遇到这个事件时 sql:
select * from sys.dm_qn_subscriptions
仍然returns 没有行。不在我的数据库或主机上。所以 我认为博客 post 重新订阅 on change 事件时出错了 ?此示例 https://msdn.microsoft.com/en-us/library/a52dhwx7(VS.80).aspx 在 onchange 事件中注销并调用注册新事件的方法。有人可以验证我的假设吗?
这些是我事件中 SqlNotificationEventArgs e
的值,并告诉我我要依赖的查询无效。
SqlNotificationEventArgs.Type
--> SqlNotificationType.Subscribe
SqlNotificationEventArgs.Info
--> SqlNotificationInfo.Invalid
SqlNotificationEventArgs.Source
--> SqlNotificationSource.Statement
The statement may not use the asterisk () or table_name. syntax to specify columns.
我正在关注博客 http://www.venkatbaggu.com/signalr-database-update-notifications-asp-net-mvc-usiing-sql-dependency/ 以将 signalR 推送消息发送到已连接的客户端。 我的调试器从不触发 onchange 事件。
我的Global.asax.cs:
string connString = ConfigurationManager.ConnectionStrings["DefaultConnection"].ConnectionString;
protected void Application_Start()
{
// basic stuff
SqlDependency.Start(connString);
var repo = new Repositories.MarkerRepository();
repo.GetAllMarkers(); // to register the dependency
}
我的MarkerRepository.cs:
readonly string _connString = ConfigurationManager.ConnectionStrings["DefaultConnection"].ConnectionString;
private MarkersHub _mh = new MarkersHub(); // my signalr hub class
public IEnumerable<House> GetAllMarkers()
{
var markers = new List<House>();
using (var connection = new SqlConnection(_connString))
{
connection.Open();
using (var command = new SqlCommand(@"SELECT * FROM [dbo].Houses", connection))
{
command.Notification = null;
var dependency = new SqlDependency(command);
dependency.OnChange += new OnChangeEventHandler(dependency_OnChange);
if (connection.State == ConnectionState.Closed)
connection.Open();
var reader = command.ExecuteReader();
while (reader.Read())
{
markers.Add(item: new House {
ID = (int)reader["ID"],
Name = (string)reader["Name"],
Code = reader["Code"] != DBNull.Value ? (string)reader["Code"] : "",
Latitude = Convert.ToDouble(reader["Latitude"]),
Longitude = Convert.ToDouble(reader["Longitude"])
});
}
}
}
return markers;
}
private void dependency_OnChange(object sender, SqlNotificationEventArgs e)
{
if (e.Type == SqlNotificationType.Change)
{
_mh.SendMarkers();
}
}
我点击过一次,但没有变化,只是一个订阅通知。我已经阅读了很多关于重新订阅的内容,但是当它遇到这个事件时 sql:
select * from sys.dm_qn_subscriptions
仍然returns 没有行。不在我的数据库或主机上。所以 我认为博客 post 重新订阅 on change 事件时出错了 ?此示例 https://msdn.microsoft.com/en-us/library/a52dhwx7(VS.80).aspx 在 onchange 事件中注销并调用注册新事件的方法。有人可以验证我的假设吗?
这些是我事件中 SqlNotificationEventArgs e
的值,并告诉我我要依赖的查询无效。
SqlNotificationEventArgs.Type
--> SqlNotificationType.Subscribe
SqlNotificationEventArgs.Info
--> SqlNotificationInfo.Invalid
SqlNotificationEventArgs.Source
--> SqlNotificationSource.Statement
The statement may not use the asterisk () or table_name. syntax to specify columns.