Потому что @Slaggg спросил: есть довольно простые способы сделать это, но они почти наверняка потребуют большого количества кодирования, это значительно повлияет на производительность, и я сильно подозреваю, что это будет более беда чем стоит.
Тем не менее, для типичного n-уровневого приложения на очень высоком уровне вам понадобится:
(1) Способ уведомления среднего уровня об изменении данных. Вы можете использовать триггеры пользовательского кода внутри каждой таблицы, которые запускают какие-то уведомления (возможно, с использованием хранимых процедур WCF и CLR), или вы можете использовать объект SqlDependency . Вероятно, второй будет работать лучше.
(2) Способ уведомления каждого клиента, подключенного к этому среднему уровню. Предполагая, что вы используете WCF, вам нужно использовать одну из доступных дуплексных привязок, например Net.TCP или HttpPollingDuplex (для Silverlight). Вам нужно убедиться, что это настроено правильно как на клиенте, так и на сервере. Вам также нужно будет вручную отслеживать, какие клиенты могут быть заинтересованы в обновлении, чтобы вы могли знать, какие из них нужно обновить, и вам нужно будет удалить их из этого списка, когда они исчезнут или истечет время ожидания. У Томека из команды MS WCF есть несколько довольно хороших примеров в его блоге , которые вы, возможно, захотите исследовать.
(3) Механизм обновления модели локального клиента и / или модели представления и / или пользовательского интерфейса после получения уведомления от среднего уровня о том, что что-то изменилось. Это сложнее, чем вы думаете: достаточно сложно синхронизировать ваш пользовательский интерфейс с вашей моделью данных при нормальных обстоятельствах, но это становится значительно сложнее, когда эта модель данных может меняться и под вас с другого направления.
Идея , стоящая за этими видами уведомлений, достаточно проста, но правильная проработка всех деталей, вероятно, поможет вам отладить весь путь до ночи. И парень, который должен поддержать все это через два года, проклянет ваше имя.
Надеюсь, это поможет.