Я реализовал аналогичный механизм уведомлений, используя MSMQ. Клиентский компьютер открывает локальную общедоступную очередь, а затем сообщает серверу имя своей очереди. Когда происходят изменения, сервер помещает уведомления во все очереди клиентов, о которых ему сообщают. Таким образом, клиент будет знать, что данные готовы, даже если они не выполнялись во время отправки уведомления.
Единственным недостатком является то, что для клиентов требуется MSMQ, поэтому это может не сработать, если у вас нет такого контроля над компьютерами вашего клиента.
Для дополнительного уровня избыточности (например, если клиентский компьютер полностью выключен, и, следовательно, клиентская очередь недоступна), вы могли бы поставить в очередь уведомления на сервере перед распространением среди клиентов. Уведомления в очередях сервера удаляются только при успешном контакте с клиентом (или, возможно, после 3 неудачных попыток и т. Д.)
Также в этом отношении, если серверу не удается доставить сообщения клиенту измеренное количество раз в течение измеренного периода времени, тогда объекты поддержки уведомляются, оповещения об ошибках выходят, а очередь клиента удаляется из список направлений. Когда я говорю «измеренный», я имею в виду частоту / продолжительность, которая имеет смысл для настройки. В моем случае это было 5 попыток с 5-минутными интервалами между попытками.
Может также иметь смысл периодически обновлять подписку на уведомления для клиента. Если обновление не происходит, в конечном итоге очередь клиента удаляется из списка адресатов с помощью процесса «грумера» в службе.