Как синхронизировать клиенты Silverlight с WCF? - PullRequest
1 голос
/ 05 января 2011

это, вероятно, только некоторая концептуальная проблема, но я не могу найти идеальное решение.

Я хотел бы создать клиентское приложение Silverlight, которое использует WCF для управления сторонним приложением через какой-либо самопишущий веб-сервис. Если имеется более одного клиента Silverlight, все клиенты должны быть синхронизированы, то есть изменения параметров от одного клиента должны распространяться на все клиенты.

Я установил очень простой графический интерфейс Silverlight, который управляет параметрами, которые передаются на сервер (класс наследует 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) или функцию - но я не уверен, возникнут ли позже проблемы с привязкой данных. Также я не хочу просто копировать части свойств кода, чтобы предотвратить ошибки с избыточным кодом.

Так что бы вы порекомендовали?

Спасибо!

1 Ответ

1 голос
/ 05 января 2011

Одним из распространенных решений здесь является использование логического значения для отслеживания вашего текущего состояния в OnPropertyChanged. При получении пакета WCF оно может быть установлено в значение «истина», и если оно истинно, ретрансляция не выполняется. Затем вы устанавливаете значение false после установки свойства.

Когда вы устанавливаете свойство нормально, вы просто оставляете его ложным. Это приведет к тому, что он будет транслироваться нормально при внутренней настройке, но не при установке через вызов WCF.

Эта опция работает, но она требует осторожности, чтобы получить права. Поскольку вы помещаете эту логику в одну точку, получить правильную информацию будет довольно просто.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...