2014-12-10 4 views
2

Я установил все права Acces в DataBaseSqlDependency.Start (ConnectionString) возвращает каждый раз, когда ложный

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); 

// начал ложно, а затем Я получаю эту ошибку

Исключение типа 'System.InvalidOperationException' произошло в System.Data.dll, но было не обрабатывается в коде пользователя Дополнительная информация: При использовании SqlDependency без предоставления значения параметра необходимо вызывать SqlDependency.Start() перед выполнением команды, добавленной в экземпляр SqlDependency.

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; 
    } 
+0

Просьба показать другой код этого звонка. Также любые другие вызовы, которые могут использовать одну и ту же строку соединения. –

+0

@ScottChamberlain Я добавил свой код в C# – Alex

+0

Устранена ли проблема, если вы замените порядок вызовов 'SqlDependency.Start' и' SqlCacheDependencyAdmin.EnableNotifications'? –

ответ

4

Попробуйте добавить имя очереди к вашему Start:

bool startResult = SqlDependency.Start(connString, queueName) 

Я также должен добавить имя службы и тайм-аут, чтобы мой SqlDependency конструктор, чтобы получить вещи работать правильно. (его в VB, но вы поняли идею)

dependency = New SqlDependency(command, "Service=" + SERVICE_NAME + ";", Int32.MaxValue) 
Смежные вопросы