это, вероятно, только некоторые концептуальные проблемы, но я не могу найти идеальное решение.Как синхронизировать клиенты Silverlight с WCF?
Я хотел бы создать клиентское приложение Silverlight, которое использует WCF для управления сторонним приложением через собственный автономный веб-сервис. Если есть более одного клиента Silverlight, все клиенты должны быть синхронизированы, то есть изменения параметров от одного клиента должны распространяться на всех клиентов.
Я создал очень простой Silverlight GUI, который манипулирует параметры, которые передаются на сервер (класс наследует INotifyPropertyChanged):
public double Height
{
get { return frameworkElement.Height; }
set
{
if (frameworkElement.Height != value)
{
frameworkElement.Height = value;
OnPropertyChanged("Height", value);
}
}
}
OnPropertyChanged отвечает за передачу данных. Служба WCF (duplex net.tcp) поддерживает список всех клиентов, и как только он получает пакет данных (XElement с описанием изменения параметра), он пересылает этот самый пакет всем клиентам, кроме того, из которого был получен пакет.
Клиент получает пакет, но теперь я не уверен, что лучший способ установить свойство внутри. Если я использую «Высота» (см. Выше), новое сообщение об изменении будет сгенерировано и отправлено всем другим клиентам a.s.o.
Возможно, я мог бы использовать поле данных (frameworkElement.Height) или функцию, но я не уверен, возникнут ли проблемы с привязкой данных позже. Также я не хочу просто копировать части свойств кода, чтобы предотвратить ошибки с избыточным кодом.
Итак, что бы вы посоветовали?
Спасибо!
Whow - очень быстрая реакция, спасибо! Я думал об этом решении, но я боялся, что могут возникнуть проблемы с многопоточным процессом. – JeffRSon
@ user564226: могут быть проблемы - хотя в общем, в Silverlight это минимально. Вам нужно будет позаботиться о правильной синхронизации, но опять же, поскольку все это обрабатывается в рамках одного метода, его обычно довольно легко обрабатывать. –
@ user564226: Вероятно, для блокировки нескольких потоков может потребоваться одна блокировка, если вы используете несколько потоков здесь. –