我正在尝试使用Signalr和SqlDependency
开发网站。我已启用Service Broker并运行以下T SQL:
GRANT CREATE PROCEDURE TO [SqlUser];
GRANT CREATE SERVICE TO [SqlUser];
GRANT CREATE QUEUE TO [SqlUser];
GRANT REFERENCES ON CONTRACT::[http://schemas.microsoft.com/SQL/Notifications/PostQueryNotification] TO [SqlUser];
GRANT SUBSCRIBE QUERY NOTIFICATIONS TO [SqlUser];
GRANT CONTROL ON SCHEMA::[dbo] TO [SqlUser];
GRANT IMPERSONATE ON USER::DBO TO [SqlUser];
但是当我运行网站时,我收到以下错误:
无法找到指定的用户' 找不到队列' SqlQueryNotificationService-ce08361b-7c12-412a-a087-495959118214',因为它不存在或您没有权限。
无效的对象名称' SqlQueryNotificationService-ce08361b-7c12-412a-a087-495959118214'。
protected void Application_Start()
{
SqlDependency.Start(
ConfigurationManager
.ConnectionStrings["CiaosConnectionString"].ConnectionString);
//WebApiConfig.Register(GlobalConfiguration.Configuration);
GlobalConfiguration.Configure(WebApiConfig.Register);
有人可以帮我找到问题吗?
答案 0 :(得分:5)
而不是
GRANT CONTROL ON SCHEMA::[dbo] TO [SqlUser];
GRANT IMPERSONATE ON USER::DBO TO [SqlUser];
这似乎不是一个好主意,我发现你可以通过创建用户拥有的架构并将该架构设置为默认值来摆脱该错误。例如,对于现有用户:
CREATE SCHEMA [SqlUser] AUTHORIZATION [SqlUser]
GO
ALTER USER [SqlUser] WITH DEFAULT_SCHEMA = [SqlUser]
在SqlDependency.Start
期间,将在该模式下创建队列和存储过程。
就个人而言,我很难使用其他人拥有的架构让它工作,但我不知道为什么。