WCF-Server-zu-Client-callback-Methode mit Rückgabewert
Ich habe versucht, die Frage verschiedenen Möglichkeiten, überprüfen Sie mein Profil für die anderen zwei Fragen zu erklären, die Schwierigkeiten, die ich hatte, mit den Ansätzen, die ich genommen habe zu diesem Szenario. Ich werde überspringen Sie Sie hier.
Brauche ich nur ein Beispiel (C# bevorzugt) von einem server-Aufruf zurück zum client (über ein nettcp-Kanal), der client berechnet die Antwort und liefert ein Ergebnis.
- Die server der aufrufende thread wird blockiert, bis der client sendet die Antwort.
- Rückruf des Servers ist aufgefordert, durch ein Ereignis, wie ein timer, nicht einen Aufruf durch den client.
- Der client nicht aufrufen, wieder zurück an den server im Rahmen des server-Rückruf, so sollte es keine Deadlocks Herausforderungen.
- Dem client nehmen kann (und Sie für diese übung nehmen sollte) einen oder mehrere Parameter, mit denen die Berechnung
- Den AUFTRAGGEBER zurückgeben kann (und Sie für diese übung zurückkehren sollte) eine nicht-leere Folge
- Der Ansatz sollte zumindest kompatibel, wenn nicht umgesetzt, mit der Fähigkeit zur Verarbeitung mehrerer clients wiederum, darunter ein subscribe() und unsubscribe () - Funktionalität.
- Dies ist keine Hausaufgabe, es ist als Beispiel dienen, wie man einen WCF-basierte Abonnenten - /publisher-server, der das unterstützt (paar) vertrauenswürdigen Kunden mit low-latency-server-client-Kommunikation, ohne Abfragen und ohne Nachrichten werfen (über den Zaun)
- Ich bin NICHT speziell interessiert an Lösungen, die beinhalten
(IsOneWay = true)
, es sei denn, es wird klar, dass ich sehr verwirrt bin, über seine Bedeutung und seine Folgen.
Dank!
InformationsquelleAutor Jason Kleban | 2010-09-14
Du musst angemeldet sein, um einen Kommentar abzugeben.
Überprüfen dieser Artikel auf CodeProject. Dieser beschreibt das grundlegende Beispiel der Rückrufe. Einige Dinge, die Sie möglicherweise ändern müssen:
Auf callback-Vertrag, die Vorgänge markiert, da ein Weg - dies ist zu vermeiden, blockiert der server wegen zu schlechter client (empfohlen). Aber wenn Sie müssen den server blockiert, dann müssen Sie entfernen eine Möglichkeit. Beachten Sie, dass, wenn Sie gehen, um callback-mehrere Kunden nacheinander, dann haben Sie möglicherweise callback jeweils anderen thread andere weisen, die erste client-block callback zum nächsten Kunden.
Beim aufrufen von callback-ist wirklich ein server-Implementierung. Beispiel unterhält eine Liste der client-callback-Kanäle, wenn client-Verknüpfungen (oder abonniert, in Ihrer Anforderung). Nun, diese Liste kann genutzt werden, um callback aufrufen, wie Sie wollen. So können Sie aufrufen, Rückrufe auf den timer einfach durch das iterieren über die Liste. Beachten Sie, dass Sie haben, um sicherzustellen, thread-sicheren Zugriff auf die Liste.
Wenn client hat wieder einige Ergebnis im callback dann wieder OneWay kann nicht verwendet werden.
Wie bereits erwähnt, abonnieren Sie bedeutet einfach das hinzufügen zu der Liste (join party im Beispiel) und Abmelden, bedeutet das entfernen aus der Liste (Partei verlassen).
Bearbeiten:
Habe ich genommen, den Quelltext von der Beispiel gesichtet und modifiziert Sie wie folgt:
Hinzugefügt eine Methode
Echo
im Rückruf-Vertrag:Aufgerufen Echo vom Dienst, wenn jemand verließ die Partei und gedruckte Antwort von client auf der Konsole. Und er arbeitete w/o irgendwelche Probleme.
Beachten Sie, dass dieses Beispiel verwendet VS generierten client-proxy erbt von
System.ServiceModel.DuplexClientBase<T>
wodurch der client-code viel einfacher. Vielleicht sollte man es versuchen.Was ist das Problem, nicht die Angabe IsOneWay Attribut callback-Vertrag?
Es funktioniert nicht, soweit ich das versucht habe. Sehen Sie mein Beispiel hier. Funktioniert es für Sie?
Sorry für die verspätete Antwort - StackOverflow scheint immer ein wenig langsam mit den Benachrichtigungen...
Ich bin nicht sicher, ob Ihr code funktioniert oder nicht. Allerdings habe ich gerade geändert das Beispiel (das habe ich gesichtet) source-code hinzufügen-sync-callback - - und es funktioniert w/o Probleme. Ich bearbeitet meine Antwort auf meine änderungen.
InformationsquelleAutor VinayC