Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Уведомление клиентов об изменениях на сервере
|
|||
|---|---|---|---|
|
#18+
Привет всем! Вопрос несколько потрепан, но найти навскидку удобоваримое и простое решение по сабжу не удалось. Итак, что имеем. Есть двухуровневое приложение. Предположим, это некий корпоративный календарь. У каждого пользователя есть WinForms приложение. С помощью которого можно создавать события в корпоративном календаре. Пользователи могут руками обновить имеющиеся события календаря. Могут создать новое событие. Не обязательно средствами своего приложения (так получилось :( ). Т.е. единственная точка, в которой известно о создании нового события - это некая хранимая процедура на сервере. И вот - возникает вопрос. Как на стороне SQL Server можно сгенерировать некое уведомление о создании нового события и передать это уведомление для всех подключенных клиентов? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.08.2019, 16:56 |
|
||
|
Уведомление клиентов об изменениях на сервере
|
|||
|---|---|---|---|
|
#18+
Vadim Romanenko, автори передать это уведомление для всех подключенных клиентов? сразу в мозг? или другие варианты? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.08.2019, 16:57 |
|
||
|
Уведомление клиентов об изменениях на сервере
|
|||
|---|---|---|---|
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.08.2019, 17:02 |
|
||
|
Уведомление клиентов об изменениях на сервере
|
|||
|---|---|---|---|
|
#18+
Vadim RomanenkoКак на стороне SQL Server можно сгенерировать некое уведомление о создании нового события и передать это уведомление для всех подключенных клиентов? Для этого обычно используется трехзвенка, чтобы уведомления рассылал сервер приложений. В двухзвенке на стороне WinForms-приложения делаете бесконечный пинг, который раз в N секунд/минут/часов вызывает ХП, проверяющую, нет ли для текущего пользователя новых уведомлений. Если есть - показывает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.08.2019, 17:04 |
|
||
|
Уведомление клиентов об изменениях на сервере
|
|||
|---|---|---|---|
|
#18+
TaPaKVadim Romanenko, автори передать это уведомление для всех подключенных клиентов? сразу в мозг? или другие варианты? Нет, пока чипы не вживляем, а прямая коммуникация тудой - вроде бы только на совести экстрасенсов :) Под клиентами подразумевается клиентское приложение ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.08.2019, 17:08 |
|
||
|
Уведомление клиентов об изменениях на сервере
|
|||
|---|---|---|---|
|
#18+
MinamotoVadim RomanenkoКак на стороне SQL Server можно сгенерировать некое уведомление о создании нового события и передать это уведомление для всех подключенных клиентов? Для этого обычно используется трехзвенка, чтобы уведомления рассылал сервер приложений. В двухзвенке на стороне WinForms-приложения делаете бесконечный пинг, который раз в N секунд/минут/часов вызывает ХП, проверяющую, нет ли для текущего пользователя новых уведомлений. Если есть - показывает. Да, я понимаю, что типичное решение - это трехзвенка. Но у нас - двухзвенка. Бесконечный пинг - уверен, есть более экономичные решения. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.08.2019, 17:09 |
|
||
|
Уведомление клиентов об изменениях на сервере
|
|||
|---|---|---|---|
|
#18+
Vadim Romanenko, читайте по ссылке, которую привёл invm. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.08.2019, 17:37 |
|
||
|
Уведомление клиентов об изменениях на сервере
|
|||
|---|---|---|---|
|
#18+
Vadim Romanenko, если нужны экономичные решения, то надо начать с описания того, что планируется экономить. а в процессе написания окажется, что собсна предложенный бесконечный пинг техически мало чем отличается от других решений. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.08.2019, 17:42 |
|
||
|
Уведомление клиентов об изменениях на сервере
|
|||
|---|---|---|---|
|
#18+
andy st, Возможно, Вы и правы. Чем городить вот этот весь огород с SQL Dependency... Что есть. Компания, занимающаяся спецтранспортировкой людей. Поездки в день считаются в тысячах. Водители в сотнях. Операторов - десятки. Новая поездка может прийти кучей способов, в том числе через руки операторов. Оператор должен знать, если пришла новая поездка на сегодня в течении, ну, скажем, минуты. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.08.2019, 18:20 |
|
||
|
Уведомление клиентов об изменениях на сервере
|
|||
|---|---|---|---|
|
#18+
Vadim RomanenkoИ вот - возникает вопрос. Как на стороне SQL Server можно сгенерировать некое уведомление о создании нового события и передать это уведомление для всех подключенных клиентов?Взять в штат програмиста. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.08.2019, 20:17 |
|
||
|
Уведомление клиентов об изменениях на сервере
|
|||
|---|---|---|---|
|
#18+
Vadim Romanenko, сервер баз данных - вообще такая штука, которая отвечает на вопросы,но сама из не задаёт. Такова его природа. Это просто бочка с огурцами. Огурцы же в рот сами не запрыгивают? Хотя с галушками был прецедент. Оповещать должен источник события, а не сервер, все остальное - это вандализм и надругательства. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.08.2019, 21:53 |
|
||
|
Уведомление клиентов об изменениях на сервере
|
|||
|---|---|---|---|
|
#18+
Ставите любую очередь, пуляете в нее события с сервера, а клиенты пусть на очередь подписываются и разгребают. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.08.2019, 22:09 |
|
||
|
Уведомление клиентов об изменениях на сервере
|
|||
|---|---|---|---|
|
#18+
Гавриленко Сергей АлексеевичСтавите любую очередь, пуляете в нее события с сервера, а клиенты пусть на очередь подписываются и разгребают. Смех в том, что у меня и так используется MSMQ. Но с одной стороны, это, вроде как, устаревшая штука. С другой стороны - я пока не вижу как пулять в MSMQ из хранимой процедуры SQL Server ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.08.2019, 18:24 |
|
||
|
Уведомление клиентов об изменениях на сервере
|
|||
|---|---|---|---|
|
#18+
invm https://docs.microsoft.com/ru-ru/dotnet/framework/data/adonet/sql/query-notifications-in-sql-server Пробую реализовать подход SqlDependency. Но почему-то нотификация не приходит. Может кто-то сможет подсказать - почему? В первую очередь подготовил БД Код: sql 1. При старте формы выполняется код: Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. Собственно, попытка добавления нотификации: Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. Ни одного вызова dependency_OnChange не происходит. Как думаете - что не так? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.08.2019, 20:21 |
|
||
|
Уведомление клиентов об изменениях на сервере
|
|||
|---|---|---|---|
|
#18+
Vadim RomanenkoС другой стороны - я пока не вижу как пулять в MSMQ из хранимой процедуры SQL Server Posting Message to MSMQ from SQL Server ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.08.2019, 20:36 |
|
||
|
Уведомление клиентов об изменениях на сервере
|
|||
|---|---|---|---|
|
#18+
alexeyvgVadim RomanenkoС другой стороны - я пока не вижу как пулять в MSMQ из хранимой процедуры SQL Server Posting Message to MSMQ from SQL Server Да,спасибо, тоже уже нашел эту статью. Навскидку не завелась. Да и пока хочу попробовать через Dependency Плюс пообщался с коллегами - вроде MSMQ имеет неприятные глюки. Время от времени. Когда очередь зависает и не пропускает сообщения через себя. Так что тут скорее нужно будет переводить проект уж сразу на другие очереди. Ну или может заведется Sql Dependency :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.08.2019, 20:40 |
|
||
|
Уведомление клиентов об изменениях на сервере
|
|||
|---|---|---|---|
|
#18+
alexeyvgVadim RomanenkoС другой стороны - я пока не вижу как пулять в MSMQ из хранимой процедуры SQL Server Posting Message to MSMQ from SQL Server Нуууу. Так не интересно. В таком разе можно сразу CLR процедуру написать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.08.2019, 21:53 |
|
||
|
Уведомление клиентов об изменениях на сервере
|
|||
|---|---|---|---|
|
#18+
uaggsteralexeyvgпропущено... Posting Message to MSMQ from SQL Server Нуууу. Так не интересно. В таком разе можно сразу CLR процедуру написать.Ага, CLR ещё лучше, они как раз для таких задач. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.08.2019, 22:26 |
|
||
|
Уведомление клиентов об изменениях на сервере
|
|||
|---|---|---|---|
|
#18+
Кто в курсе - можно ли как-то выдать гранты одновременно для любого юзера, который подключается через Windows Authentication? Для существующих и будущих юзеров? Возможно, есть какой-то подходящий псевдоним? А то что-то нотификации не приходят. И есть подозрение, что проблема в этом моменте: support.microsoft.comThe user must have the correct client and server side permissions to request and receive notifications. Users who execute commands requesting notification must have SUBSCRIBE QUERY NOTIFICATIONS database permission on the server. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.08.2019, 16:49 |
|
||
|
Уведомление клиентов об изменениях на сервере
|
|||
|---|---|---|---|
|
#18+
Vadim RomanenkoКто в курсе - можно ли как-то выдать гранты одновременно для любого юзера, который подключается через Windows Authentication? Для существующих и будущих юзеров? Возможно, есть какой-то подходящий псевдоним? А то что-то нотификации не приходят. И есть подозрение, что проблема в этом моменте: support.microsoft.comThe user must have the correct client and server side permissions to request and receive notifications. Users who execute commands requesting notification must have SUBSCRIBE QUERY NOTIFICATIONS database permission on the server.А "паблику" не подойдёт? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.08.2019, 17:34 |
|
||
|
Уведомление клиентов об изменениях на сервере
|
|||
|---|---|---|---|
|
#18+
alexeyvg, Или не подошло, или этот SqlDependency вообще странно работает. Уже несколько раз перебрал и код, и документацию - единственное к чему можно прикопаться, это вот эти вот права для пользователя на сервере. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.08.2019, 17:49 |
|
||
|
Уведомление клиентов об изменениях на сервере
|
|||
|---|---|---|---|
|
#18+
Все - я сдался. Не получилось никак. Возможно, кто-то сможет создать работающий прототип - было бы интересно увидеть пример приложения на каком-нибудь Гитхабе. Реализовал через периодические async/await запросы за данными в таблице через, у которых ИД больше заданного. Количество данных в таблице меряется сотнями, так что не думаю чтоб оно сильно тупило. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.08.2019, 18:38 |
|
||
|
Уведомление клиентов об изменениях на сервере
|
|||
|---|---|---|---|
|
#18+
Vadim RomanenkoРеализовал через периодические async/await запросы за данными в таблице через, у которых ИД больше заданного. Количество данных в таблице меряется сотнями, так что не думаю чтоб оно сильно тупило.Запрос чтения из очереди раз в полминуты от сотни операторов - это не слишком много... Vadim Romanenkoalexeyvg, Или не подошло, или этот SqlDependency вообще странно работает. Уже несколько раз перебрал и код, и документацию - единственное к чему можно прикопаться, это вот эти вот права для пользователя на сервере.Так для пользователя, которому явно дали такие права (не через паблик, а ему самому), работает? Vadim RomanenkoВозможно, кто-то сможет создать работающий прототип - было бы интересно увидеть пример приложения на каком-нибудь Гитхабе.А пример кода от MS не подходит? https://code.msdn.microsoft.com/How-to-use-SqlDependency-5c0da0b3 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.08.2019, 18:58 |
|
||
|
Уведомление клиентов об изменениях на сервере
|
|||
|---|---|---|---|
|
#18+
Vadim Romanenko, хотите некое альтернативное решение? я правда не могу сказать как скажется такое решение на производительности сервера, это надо тестировать но руки не доходили. данный подход основывается на функционале используемом в мониторах трасс и XE, а именно это процедура и функция: Код: sql 1. 2. первая работает с серверными трассами, вторая с расширенными событиями, обе возвращают данные в виде потока. также у нас есть средство позволяющее вызвать пользовательское событие: Код: sql 1. 2. 3. 4. 5. 6. 7. итого все что требуется в приложении: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. на сервере: Код: sql 1. 2. 3. 4. 5. в таком случае сможете отсылать уведомления в приложение без особых заморочек с service broker при этом у вас есть возможность логировать уведомления можно для расширенных событий настроить цель в файл к примеру. и на декларативном уровне у вас появляется некоторая возможность конфигурирования уведомлений в user_info можно передавать nvarchar(128) а в data varbinary(8000), а то как вы уже будете использовать эту информацию зависит от вас. Код: sql 1. 2. при обращении к функции fn_MSxe_read_event_stream запрос подключается к сиквелу в режиме чтения с типом ожидания XE_LIVE_TARGET_TVF, тоже самое делает студия когды вы щелкаете "наблюдать за данными предаваемыми в режиме реального времени" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.08.2019, 19:22 |
|
||
|
Уведомление клиентов об изменениях на сервере
|
|||
|---|---|---|---|
|
#18+
felix_ffитого все что требуется в приложенииТак этот вариант ТС упоминал: "постоянный опрос сервера с каждого клиента" А он хочет заменить опросы на вызовы клиента со стороны сервера при наступлении некоего события (что в теории правильно, хотя есть вопрос, стоит ли это такого геморроя). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.08.2019, 22:08 |
|
||
|
|

start [/forum/topic.php?fid=46&msg=39853834&tid=1687355]: |
0ms |
get settings: |
6ms |
get forum list: |
15ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
51ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
56ms |
get tp. blocked users: |
1ms |
| others: | 253ms |
| total: | 396ms |

| 0 / 0 |
