SqlDependency не отлавливаются изменения в базе
От: -rsdn- Беларусь http://dsalodki.wix.com/resume
Дата: 07.12.16 14:18
Оценка:
использую в signalR

    public class ExampleHub : Hub, ITransientDependency
{
        public override Task OnConnected()
        {
            Storage.ConnStr = WebConfigurationManager.ConnectionStrings["Default"].ConnectionString;
            SqlDependency.Start(Storage.ConnStr);
            Storage.Connection = new SqlConnection(Storage.ConnStr);
            Storage.Connection.Open();
            Storage.Command = new SqlCommand("SELECT [State] FROM[Test].[dbo].[State]", Storage.Connection);
            Storage.Dependency = new SqlDependency(Storage.Command);
            Storage.Dependency.OnChange += Dependency_OnChange;
            Storage.Command.ExecuteReader();
.......

        private void Dependency_OnChange(object sender, SqlNotificationEventArgs e)
        {

        }
......
    public static class Storage
    {
        public static bool IsEnabled;
        public static SqlConnection Connection;
        public static SqlCommand Command;
        public static SqlDependency Dependency;
        public static string ConnStr;
    }


Dependency_OnChange вызывается сразу после ExecuteReader и только 1 раз, во время изменений в базе ничего не происходит
Re: SqlDependency не отлавливаются изменения в базе
От: Sinix  
Дата: 07.12.16 14:42
Оценка:
Здравствуйте, -rsdn-, Вы писали:


R>Dependency_OnChange вызывается сразу после ExecuteReader и только 1 раз, во время изменений в базе ничего не происходит

http://stackoverflow.com/questions/39625995/sqldependency-with-signalr-not-firing-dependency-onchange-consistently
http://stackoverflow.com/questions/31611795/how-to-notify-database-changes-with-signalr
https://www.codeproject.com/articles/883702/real-time-notifications-using-signalr-and-sql-depe
http://techbrij.com/database-change-notifications-asp-net-signalr-sqldependency
?
Re: SqlDependency не отлавливаются изменения в базе
От: Михаил Романов Удмуртия https://mihailromanov.wordpress.com/
Дата: 07.12.16 15:00
Оценка:
Здравствуйте, -rsdn-, Вы писали:

R>Dependency_OnChange вызывается сразу после ExecuteReader и только 1 раз, во время изменений в базе ничего не происходит

Попробуйте сделать тест без использования SignalR — просто проверить, что сам SqlDependency работает
Выражение для отслеживания выглядит, вроде бы правильно.

Поэтому попробуйте посмотреть в логах SQL Server — нет ли там ошибок.

У меня, например, не так давно возникла та же проблема — не приходили уведомления об изменениях.
В логах обнаружилось сообщение

An exception occurred while enqueueing a message in the target queue. Error: 15404, State: 19. Could not obtain information about Windows NT group/user 'DOMAIN\Mihail_Romanov', error code 0x54b.


Оказалось, что я постоянно работаю с SQL из-под своей учетной записи, и база создается от моего имени (т.е. владельцем базы ставится моя доменная учетная запись — она спроецирована на dbo), а владелец базы нужен для каких-то внутренних телодвижений с очередью событий.
Проблема решилась сменой dbo на sa:
sp_changedbowner 'sa'


Может и у вас что-то в этом роде.
Re[2]: SqlDependency не отлавливаются изменения в базе
От: -rsdn- Беларусь http://dsalodki.wix.com/resume
Дата: 07.12.16 15:17
Оценка:
Здравствуйте, Михаил Романов, Вы писали:

МР>Здравствуйте, -rsdn-, Вы писали:


R>>Dependency_OnChange вызывается сразу после ExecuteReader и только 1 раз, во время изменений в базе ничего не происходит

МР>Попробуйте сделать тест без использования SignalR — просто проверить, что сам SqlDependency работает
МР>Выражение для отслеживания выглядит, вроде бы правильно.

МР>Поэтому попробуйте посмотреть в логах SQL Server — нет ли там ошибок.


МР>У меня, например, не так давно возникла та же проблема — не приходили уведомления об изменениях.

МР>В логах обнаружилось сообщение
МР>

An exception occurred while enqueueing a message in the target queue. Error: 15404, State: 19. Could not obtain information about Windows NT group/user 'DOMAIN\Mihail_Romanov', error code 0x54b.


МР>Оказалось, что я постоянно работаю с SQL из-под своей учетной записи, и база создается от моего имени (т.е. владельцем базы ставится моя доменная учетная запись — она спроецирована на dbo), а владелец базы нужен для каких-то внутренних телодвижений с очередью событий.

МР>Проблема решилась сменой dbo на sa:
МР>
sp_changedbowner 'sa'


МР>Может и у вас что-то в этом роде.



Было
Service Broker needs to access the master key in the database 'Test'. Error code:32. The master key has to exist and the service master key encryption is required.
сделал так
http://www.sqlcoffee.com/Troubleshooting109.htm

ошибка в логах пропала, но все по прежнему

кстати да — пробую без SignalR в WinForms по нажатию на кнопку
Отредактировано 07.12.2016 15:26 dsalodki . Предыдущая версия .
Re: SqlDependency не отлавливаются изменения в базе
От: -rsdn- Беларусь http://dsalodki.wix.com/resume
Дата: 08.12.16 08:56
Оценка:
Здравствуйте, -rsdn-, Вы писали:

R>использую в signalR


R>
R>    public class ExampleHub : Hub, ITransientDependency
R>{
R>        public override Task OnConnected()
R>        {
R>            Storage.ConnStr = WebConfigurationManager.ConnectionStrings["Default"].ConnectionString;
R>            SqlDependency.Start(Storage.ConnStr);
R>            Storage.Connection = new SqlConnection(Storage.ConnStr);
R>            Storage.Connection.Open();
R>            Storage.Command = new SqlCommand("SELECT [State] FROM [Test].[dbo].[State]", Storage.Connection);
R>            Storage.Dependency = new SqlDependency(Storage.Command);
R>            Storage.Dependency.OnChange += Dependency_OnChange;
R>            Storage.Command.ExecuteReader();
R>.......

R>        private void Dependency_OnChange(object sender, SqlNotificationEventArgs e)
R>        {

R>        }
R>......
R>    public static class Storage
R>    {
R>        public static bool IsEnabled;
R>        public static SqlConnection Connection;
R>        public static SqlCommand Command;
R>        public static SqlDependency Dependency;
R>        public static string ConnStr;
R>    }
R>


R>Dependency_OnChange вызывается сразу после ExecuteReader и только 1 раз, во время изменений в базе ничего не происходит


надо было удалить название базы [Test].
Отредактировано 08.12.2016 9:33 dsalodki . Предыдущая версия .
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.