2016-12-15 4 views
4

У меня проблема с SqlTableDependency. Мой метод Changed не вызывается, когда я делаю insert/update/delete в таблице желания. Событие OnStatusChanged работает нормально.SqlTableDependency onchange событие не запущено

string conn = @"data source=secret server; integrated security=True; initial catalog=secret db;User id=secret user"; 

    var mapper = new ModelToTableMapper<SqlDataModel>(); 

    mapper.AddMapping(c => c.datavalue, "datavalue");  

    using (var dep = new SqlTableDependency<SqlDataModel>(conn, "data", mapper)) 
    { 
     dep.OnChanged += Changed; 
     dep.OnStatusChanged += OnStatusChanged; 
     dep.OnError += OnError; 
     dep.TraceLevel = TraceLevel.Verbose; 
     dep.TraceListener = new TextWriterTraceListener(Console.Out);    
     dep.Start();   

     Console.WriteLine("Press a key to exit");   
     Console.ReadKey();    
     dep.Stop(); 
    } 
} 
static void OnStatusChanged(object sender, StatusChangedEventArgs e) 
{ 
    Console.WriteLine(e.ToString()); 
} 
static void OnError(object sender, ErrorEventArgs e) 
{ 
    Console.WriteLine(e.ToString()); 
} 
static void Changed(object sender, RecordChangedEventArgs<SqlDataModel> e) 
{  
    if (e.ChangeType != ChangeType.None) 
    { 
     var changedEntity = e.Entity; 
     Console.WriteLine("DML operation: " + e.ChangeType);   
     Console.WriteLine("value: " + changedEntity.datavalue); 
    } 
} 

Над кодом я на основе https://tabledependency.codeplex.com/wikipage?title=SqlTableDependency Я уверен, что у меня есть, и я использую db_owner роль. Я включил брокер, я вижу, что триггеры, службы и т. Д. Создаются в mssql db.

enter image description here

+2

Пожалуйста, обратите внимание, что SqlTableDependency сейчас на https://github.com/christiandelbianco/monitor- стол с изменением с-sqltabledependency –

ответ

4

Я finnally нашел ошибку в моей sys.transmission_queue таблице: произошло исключение во время enqueueing сообщения в целевой очереди. Ошибка:

15517, State: 1. Cannot execute as the database principal because the principal "dbo" does not exist, this type of principal cannot be impersonated, or you do not have permission.

Даже если база данных уже я дал себе полное разрешение, я должен был еще сделать

ALTER AUTHORIZATION ON DATABASE::secret db TO sa 

 Смежные вопросы

  • Нет связанных вопросов^_^