Laden...

Synchronizierung von WCF-Callbacks für eine GUI-Anwendung

Erstellt von CSharperUser vor 13 Jahren Letzter Beitrag vor 13 Jahren 1.654 Views
C
CSharperUser Themenstarter:in
80 Beiträge seit 2010
vor 13 Jahren
Synchronizierung von WCF-Callbacks für eine GUI-Anwendung

Hallo zusammen,

ich habe ein Problem und habe trotz Google keine Lösung gefunden. Hoffe nun, dass einige von euch mir helfen können.

Es existiert ein WPF-Client, der über einen WCF-Service mit dem Server kommuniziert.

Wenn ich beispielsweise in der GUI einen Service aufrufe wird in der Serviceimplementierung für diese Methode ein Callback ausgeführt.

Bsp: Ich rufe im Client die Methode XYZ auf. In der Methode wird ein Callback gefeuert mit einer Ausgabe "XYZ wurde aufgerufen".
Also: Insert -> Event Inserted

Wenn ich dies in einer Konsolenanwendung laufen lasse wird auch diese Reihenfolge eingehalten.

In der WPF-Anwendung blockiert der Callback jedoch.
Durch Rechereche habe ich rausgefunden, dass man bei der Callback-Implementierung das Attribut "UseSynchronizationContext" auf false setzen muss.
Jedoch wird dann ein asynchroner Aufruf gestartet und mein Callback kommt dann natürlich irgendwann beim Client an und nicht in der von mir im obigen Beispiel beschriebenen Reihenfolge.

Ich will aber die oben genannte Reihenfolge erreichen, ohne dass die GUI blockiert.

Gibt es eine Möglichkeit, die Callbacks synchron aufzurufen ohne mit UseSynchronizationContext = false zu arbeiten?

Danke bereits für eure Hilfe.

Z
403 Beiträge seit 2007
vor 13 Jahren

Verwende Begin und End Methoden deiner WCF Funktionen

Die musst du halt in der Client Konfiguration einschalten

C
CSharperUser Themenstarter:in
80 Beiträge seit 2010
vor 13 Jahren

Hallo TheGear,

danke für die Info.

Was meinst du genau mit den Begin und End Funktionen?

Die einzigen dieser Art die mir bekannt sind, sind bei der ChannelFactory BeginOpen. Aber da arbeite ich ja mit CreateChannel.

371 Beiträge seit 2008
vor 13 Jahren

Hallo CSharperUser,

hier:
http://msdn.microsoft.com/en-us/library/ms734701.aspx

und da:
http://msdn.microsoft.com/en-us/library/ms731177.aspx

solltest du Antworten auf deine Fragen finden.

Gruesse,
Manullino

C
CSharperUser Themenstarter:in
80 Beiträge seit 2010
vor 13 Jahren

Hallo manullino,

danke für deine Antwort. Ich werde es mir entsprechend anschauen. Scheint denk ich genau mein Problem zu lösen.