【发布时间】:2016-11-22 05:23:36
【问题描述】:
当有一些数据库更改时,我使用SqlDependecy 和signalR 将通知推送到客户端浏览器,我关注了this 和this 的帖子,并且在本地SqlExpress 版本11.0 和本地连接中一切正常字符串,但是当我使用生产连接字符串连接到托管在 GoDaddy 中的远程数据库时,我遇到了某种权限问题
工作本地连接字符串
<!--<add name="NotifyConnection" providerName="System.Data.SqlClient" connectionString=
"Data Source=.\SQLExpress;Initial Catalog=TestDB;Integrated Security=SSPI;" />-->
生产连接字符串
<add name="NotifyConnection" connectionString="Server=000.00.00.000;Database=TestDB;
User Id=UserName;Password=YourPassword;" providerName="System.Data.SqlClient" />
获取数据方法
public IEnumerable<Order> GetData()
{
using (var connection = new SqlConnection(ConfigurationManager.ConnectionStrings
["NotifyConnection"].ConnectionString))
{
using (SqlCommand command = connection.CreateCommand())
{
command.CommandType = CommandType.Text;
command.CommandText = "SELECT OrderID,CustomerID FROM dbo.[RestUser]";
command.Notification = null;
SqlDependency dependency = new SqlDependency(command);
dependency.OnChange += new OnChangeEventHandler(dependency_OnChange);
if (connection.State == ConnectionState.Closed)
connection.Open();
using (var reader = command.ExecuteReader())
return reader.Cast<IDataRecord>() // Here the Error throws
.Select(x => new Order()
{
OrderID = x.GetInt32(0),
CustomerID = x.GetInt32(1)
}).ToList();
}
}
}
我尝试了什么?
我按照post 在 sql server 中授予权限,但不确定这种方法是否正确。
USE YourDatabaseName;
CREATE QUEUE NameChangeQueue;
CREATE SERVICE NameChangeService ON QUEUE NameChangeQueue ([http://schemas.microsoft.com/
SQL/Notifications/PostQueryNotification]);
GRANT SUBSCRIBE QUERY NOTIFICATIONS TO YourUserName; // Here i get this error:
//Cannot grant, deny, or revoke permissions to sa, dbo, entity owner, information_schema,
sys, or yourself.
ALTER DATABASE YourDatabaseName SET ENABLE_BROKER; // Broker is already enabled
屏幕截图:
我是SqlDependency 的新手,如何解决这个问题?
任何帮助都会很棒。
【问题讨论】:
-
查看this answer 中的网络和身份验证注意事项。另外,您在代码中的哪个位置调用
SqlDependency.Start()? -
就个人而言,我不是 SqlDependency 和 Trigger 方法的忠实拥护者。相反,我会考虑将消息发布到服务总线(或某种形式的队列)。一个侦听器可以将数据保存到数据库中(我相信您现在正在这样做),而另一个侦听器可以处理您的 SignalR 推送通知。它不仅解决了这个问题,还为您提供了一层抵御服务中断的弹性。这就是我的处理方式,但我知道这并不能直接解决您的 SqlDependency 问题,抱歉。
-
@stom 嗨,我也面临同样的问题。同样的要求同样的问题。你修复了这个错误吗?
-
@Narasappa,我遇到了 Go daddy 数据库服务器的问题,在共享主机中它们限制了一些功能,你在使用共享主机吗?并尝试使用 signalR 显示通知?
标签: sql-server asp.net-mvc signalr signalr.client sqldependency