SqlDependency 和 asp.net mvc 应用程序未完全运行
SqlDependency and asp.net mvc application not fully working
关于在普通 Asp.net MVC 应用程序中使用 SqlDependency
class 我有奇怪的问题和疑问
我有标准控制器,代码为:
public ActionResult Index()
{
RegisterNotification();
return View();
}
public void RegisterNotification()
{
var cs = ConfigurationManager.ConnectionStrings["TestDb"].ConnectionString;
var sql = @"Select Data From dbo.TestTable";
using (var conn = new SqlConnection(cs))
{
conn.Open();
using (var cmd = new SqlCommand(sql, conn))
{
cmd.Notification = null;
var sqlDependency = new SqlDependency(cmd);
sqlDependency.OnChange += SqlDependency_OnChange;
cmd.ExecuteNonQuery();
}
}
}
public void SqlDependency_OnChange(object sender, SqlNotificationEventArgs e)
{
if (e.Type == SqlNotificationType.Change)
{
// call some SignalR method here and re-register notification
RegisterNotification();
}
}
在 Global.asax
中是 SqlDepndency
初始化(在开始和结束方法上)
好吧,在第一个请求中一切正常,但是在一些刷新(完整请求)之后 SqlDependency_OnChange
调用两次,下一次刷新调用四次等等
在控制台应用程序中,这段代码工作正常。
我的代码有问题吗?
(使用 Sql 2012 和 asp.net MVC 5.2.3 和 VisualStudio IISExpress 开发服务器)
谢谢
我想您要做的是创建一个单例来处理 SqlDependency 通知。每次有人发出请求时,都会创建一个控制器的新实例,它会注册新的通知。当您收到多个通知时,我想您会发现收到通知的是控制器的不同实例。
有一个很好的例子 here
关于在普通 Asp.net MVC 应用程序中使用 SqlDependency
class 我有奇怪的问题和疑问
我有标准控制器,代码为:
public ActionResult Index()
{
RegisterNotification();
return View();
}
public void RegisterNotification()
{
var cs = ConfigurationManager.ConnectionStrings["TestDb"].ConnectionString;
var sql = @"Select Data From dbo.TestTable";
using (var conn = new SqlConnection(cs))
{
conn.Open();
using (var cmd = new SqlCommand(sql, conn))
{
cmd.Notification = null;
var sqlDependency = new SqlDependency(cmd);
sqlDependency.OnChange += SqlDependency_OnChange;
cmd.ExecuteNonQuery();
}
}
}
public void SqlDependency_OnChange(object sender, SqlNotificationEventArgs e)
{
if (e.Type == SqlNotificationType.Change)
{
// call some SignalR method here and re-register notification
RegisterNotification();
}
}
在 Global.asax
中是 SqlDepndency
初始化(在开始和结束方法上)
好吧,在第一个请求中一切正常,但是在一些刷新(完整请求)之后 SqlDependency_OnChange
调用两次,下一次刷新调用四次等等
在控制台应用程序中,这段代码工作正常。
我的代码有问题吗?
(使用 Sql 2012 和 asp.net MVC 5.2.3 和 VisualStudio IISExpress 开发服务器)
谢谢
我想您要做的是创建一个单例来处理 SqlDependency 通知。每次有人发出请求时,都会创建一个控制器的新实例,它会注册新的通知。当您收到多个通知时,我想您会发现收到通知的是控制器的不同实例。
有一个很好的例子 here