Я делаю что-то похожее с приложением, которое написал.
Вы можете легко позволить службе обновлять клиентов при изменении данных с помощью обратного вызова. Когда клиенты подключаются к сервису, вам нужно будет сохранить их информацию обратного вызова, а когда данные обновляются, вы просто запускаете сообщение для каждого подписавшегося клиента.
Вот контракт на обратный звонок:
public interface IServiceMessageCallback
{
[OperationContract(IsOneWay = true)]
void OnReceivedServiceMessage(ServiceMessage serviceMessage);
}
Служба реализует этот интерфейс. Служба имеет это личное поле:
/// <summary>
/// Holds the callback recipients
/// </summary>
private List<IServiceMessageCallback> callbackMessages =
new List<IServiceMessageCallback>();
Когда клиенты подключаются, сделайте что-то вроде этого:
IServiceMessageCallback callback =
OperationContext.Current.GetCallbackChannel<IServiceMessageCallback>();
callbackMessages.Add(callback);
И, наконец, любой метод обновления данных в службе также должен иметь такой код:
Action<IServiceMessageCallback> fire =
delegate(IServiceMessageCallback callback)
{ callback.OnReceivedServiceMessage(serviceMessage); };
// loop thru the callback channels and perform the action
callbackMessages.ForEach(fire);
Я как бы исправил этот код вместе с довольно здоровенным сервисом, который я написал ... надеюсь, что части имеют смысл вне контекста.