Dies ist wahrscheinlich nur ein konzeptionelles Problem, aber ich kann nicht die ideale Lösung finden.Wie können Silverlight-Clients mit WCF synchronisiert werden?
Ich möchte eine Silverlight-Clientanwendung erstellen, die WCF verwendet, um eine Anwendung von Drittanbietern über einen selbst geschriebenen Webservice zu steuern. Wenn es mehr als einen Silverlight-Client gibt, sollten alle Clients synchronisiert werden, d. H. Parameteränderungen von einem Client sollten an alle Clients weitergegeben werden.
stellte ich einen sehr einfachen Silverlight-GUI, die Parameter manipuliert, die an den Server übergeben werden (Klasse erbt INotifyPropertyChanged):
public double Height
{
get { return frameworkElement.Height; }
set
{
if (frameworkElement.Height != value)
{
frameworkElement.Height = value;
OnPropertyChanged("Height", value);
}
}
}
OnPropertyChanged zum Übertragen von Daten verantwortlich ist. Der WCF-Dienst (duplex net.tcp) führt eine Liste aller Clients, und sobald er ein Datenpaket (XElement mit Beschreibung der Parameteränderung) empfängt, leitet er dieses Paket an alle Clients weiter, aber an denjenigen, von dem das Paket empfangen wurde.
Der Client empfängt das Paket, aber jetzt bin ich mir nicht sicher, was die beste Möglichkeit ist, die Eigenschaft intern festzulegen. Wenn ich "Höhe" (siehe oben) verwende, würde eine neue Änderungsnachricht erzeugt und an alle anderen Clients gesendet werden a.s.o.
Vielleicht könnte ich das Datenfeld (frameworkElement.Height) selbst oder eine Funktion verwenden - aber ich bin mir nicht sicher, ob es später Probleme mit der Datenbindung geben würde. Außerdem möchte ich nicht einfach Teile der Codeeigenschaften kopieren, um Bugs mit redundantem Code zu vermeiden.
Was würden Sie also empfehlen?
Danke!
Whow - sehr schnelle Antwort, danke! Ich hatte über diese Lösung nachgedacht, aber ich hatte Angst, dass es Probleme mit Multithreading geben könnte. – JeffRSon
@ user564226: Es kann Probleme geben - obwohl es in Silverlight im Allgemeinen minimal ist. Sie müssen darauf achten, dass die Synchronisation korrekt ist, aber da es alles in einer einzigen Methode behandelt wird, ist es normalerweise ziemlich einfach zu handhaben. –
@ user564226: Es wird wahrscheinlich eine einzige Sperre erfordern, um zu verhindern, dass mehrere Threads diese Eigenschaft gleichzeitig setzen, wenn Sie hier mehrere Threads verwenden. –