SqlDependency.Start()错误:"找不到指定的用户'所有者'"

Hoà*_*Huy 3 c# sql-server sqldependency signalr

我正在尝试使用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];
Run Code Online (Sandbox Code Playgroud)

但是当我运行网站时,我收到以下错误:

找不到指定的用户'所有者'.
找不到队列'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);
Run Code Online (Sandbox Code Playgroud)

有人可以帮我找到问题吗?

jjj*_*jjj 5

代替

GRANT CONTROL ON SCHEMA::[dbo] TO [SqlUser];
GRANT IMPERSONATE ON USER::DBO TO [SqlUser];
Run Code Online (Sandbox Code Playgroud)

无论如何,这似乎不是一个好主意,我发现你可以通过创建用户拥有的架构并将该架构设置为默认值来摆脱该错误.例如,对于现有用户:

CREATE SCHEMA [SqlUser] AUTHORIZATION [SqlUser]
GO
ALTER USER [SqlUser] WITH DEFAULT_SCHEMA = [SqlUser]
Run Code Online (Sandbox Code Playgroud)

队列和存储过程将在该模式下创建SqlDependency.Start.

就个人而言,我很难使用其他人拥有的架构来使用它,但我不知道为什么.