【问题标题】:SqlDependency.Start(connectionString) return every time falseSqlDependency.Start(connectionString) 每次返回 false
【发布时间】:2015-02-09 05:50:18
【问题描述】:

我设置好了访问数据库

use DbName
GRANT SUBSCRIBE QUERY NOTIFICATIONS TO dbuser
use DbName
GRANT SELECT ON OBJECT::schema.tableName TO dbuser
Use DbName
GRANT RECEIVE ON QueryNotificationErrorsQueue TO dbuser
ALTER DATABASE DbName SET TRUSTWORTHY ON
use DbName
alter database DbName SET ENABLE_BROKER

但是当我启动 SqlDependency 时:

bool started = SqlDependency.Start(connectionString);

//started 是假的,然后我得到这个错误

System.Data.dll 中出现“System.InvalidOperationException”类型的异常,但未在用户代码中处理 附加信息:在不提供选项值的情况下使用 SqlDependency 时,必须在执行添加到 SqlDependency 实例的命令之前调用 SqlDependency.Start()。

C#代码:

private static bool notificationEnabled = false;
private string connString= "Data Source=(local);Initial Catalog=MyDB;UID=dbuser; PWD=pass;";
    public static void EnableNotifications()
    {
        // prevent for calling twice 
        if (notificationEnabled)return; 

        System.Web.Caching.SqlCacheDependencyAdmin.EnableNotifications(connString);
        //startResult is false always
        bool startResult = SqlDependency.Start(connString);
        notificationEnabled = true;
    }

【问题讨论】:

  • 请显示该调用周围的其他代码。还有任何其他可能使用相同连接字符串的调用。
  • @ScottChamberlain 我在 c# 中添加了我的代码
  • SqlDependency.StartSqlCacheDependencyAdmin.EnableNotifications的调用顺序调换一下问题就解决了吗?

标签: c# asp.net tsql


【解决方案1】:

尝试将队列名称添加到您的开始:

bool startResult = SqlDependency.Start(connString, queueName)

我还必须将服务名称和超时添加到我的 SqlDependency 构造函数中才能正常工作。 (它在 VB 中,但你明白了)

dependency = New SqlDependency(command, "Service=" + SERVICE_NAME + ";", Int32.MaxValue)

【讨论】:

    猜你喜欢
    • 2015-08-21
    • 1970-01-01
    • 2017-08-26
    • 1970-01-01
    • 2022-12-14
    • 2015-01-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多