我在应用程序中使用SignalR,并对使用Sql Dependency的数据库更改做出反应
SqlDependency.Start(con);
但是我遇到以下错误:
此版本的SQL Server不支持语句'RECEIVE MSG'
据我所知,Azure SQL数据库不支持Service Broker。
除了迁移到Azure VM之外,还有其他解决方案吗?
具有SQL依赖关系的代码示例:
public class NotificationComponent
{
public void RegisterNotification(DateTime currentTime)
{
string conStr = ConfigurationManager.ConnectionStrings["sqlConString"].ConnectionString;
string sqlCommand = @"SELECT [ContactID],[ContactName],[ContactNo] from [dbo].[Contacts] where [AddedOn] > @AddedOn";
using (SqlConnection con = new SqlConnection(conStr))
{
SqlCommand cmd = new SqlCommand(sqlCommand, con);
cmd.Parameters.AddWithValue("@AddedOn", currentTime);
if (con.State != System.Data.ConnectionState.Open)
{
con.Open();
}
cmd.Notification = null;
SqlDependency sqlDep = new SqlDependency(cmd);
sqlDep.OnChange += sqlDep_OnChange;
using (SqlDataReader reader = cmd.ExecuteReader())
{
}
}
}
void sqlDep_OnChange(object sender, SqlNotificationEventArgs e)
{
if (e.Type == SqlNotificationType.Change)
{
SqlDependency sqlDep = sender as SqlDependency;
sqlDep.OnChange -= sqlDep_OnChange;
var notificationHub = GlobalHost.ConnectionManager.GetHubContext<NotificationHub>();
notificationHub.Clients.All.notify("added");
RegisterNotification(DateTime.Now);
}
}
public List<Contact> GetContacts(DateTime afterDate)
{
using (MyPushNotificationEntities dc = new MyPushNotificationEntities())
{
return dc.Contacts.Where(a => a.AddedOn > afterDate).OrderByDescending(a => a.AddedOn).ToList();
}
}
}
答案 0 :(得分:0)
您可以使用“创建项目时”和“修改项目时”触发Azure Logic App中的SQL对数据更改做出反应。
Azure Logic Apps中的SQL连接器使用轮询机制通过TIMESTAMP / ROWVERSION列查询表中的更改。该数据类型是专门为SQL中的这种处理而设计的。轮询查询从本质上选择rowversion大于上一个轮询值的所有行。该行为是可靠的,因为该列由SQL Server控制,并且在没有新数据的情况下,其性能非常快。当有新数据时,其性能可与简单的行查询相媲美。
有关更多信息,请阅读this文章。