Ereignisse an den Client unter Verwendung von WCF auslösen

8

Ich weiß, dass es Tutorials zu WCF-Callbacks und -Ereignissen gibt, aber ich habe Probleme, sie tatsächlich zu funktionieren, oder sie sind zu komplex. Ich bin ein echter Anfänger, also würde ich gerne hören, wenn jemand von soliden Einsteigertutorials weiß, die auf das ausgerichtet sind, was ich gerade herausfinden möchte. Bitte vergib mir, wenn ich die falsche Terminologie verwende (und bitte korrigiere mich), wie ich sagte, ich bin ein Anfänger.

Das Problem:

Es sieht vielleicht komplizierter aus als es wirklich ist. Grundsätzlich versuche ich zu erreichen:

  1. Ein Host mit etwas lokalem Speicher (sagen wir ein Array von 5 ganzen Zahlen) und einem WCF-Dienst. das auf Abfragen vom Klienten hört UND ein Update (Ereignisse?) zum Klienten abfeuert, wenn eine dieser ganzen Zahlen geändert wird (von einer externen Quelle, wie Benutzereingabe über Eingabeaufforderung und Set ()).
  2. Ein Client, der direkte Abfragen durchführen kann, um eine dieser fünf Ganzzahlen zurückzugeben oder einen bestimmten Index des Host-Arrays zu abonnieren.

Was ich tun kann:

Ich kann die Verbindung einrichten, aber mein Dienst ist auf eigenständige Funktionen beschränkt. Der Client kann zwar "Abfragen" durchführen, ist aber auf den Aufruf von Remote-Funktionen beschränkt (z. B. "Hinzufügen", bei dem alle Parameter mit der Funktion übergeben werden und die Verarbeitung intern erfolgt).

Was ich herausfinden möchte:

  1. Wie kann ich auf einige Variablen zugreifen, die im Host-Speicher von den Servicevertragsfunktionen gespeichert sind? Wie kann ich zum Beispiel eine Methode vom Client GetInt () aufrufen, die einfach etwas zurückgibt, das im Anwendungsspeicher auf dem Host gespeichert ist?
  2. Wie kann ich vom Host eine "Nachricht" an den Client senden? Rufen Sie beispielsweise im Host TellClient (int x) auf, was eine Funktion auf der Clientseite aufrufen würde? Ist das möglich, ohne einen Dienst auf beiden Seiten zu betreiben?

TLDR:

Host: Service & lt; - & gt; Klient. Gibt es eine Möglichkeit, Daten (einfach ein int) an den Client zu übertragen, ohne dass der Client irgendwelche Funktionen aufruft (keine Abfragen oder Abfragen)? Gibt es eine Möglichkeit, die WCF-Dienstzugriffsvariablen in der Instanz der Hostanwendung zu speichern, ohne statische Member zu verwenden? Kann dies auf einfache Weise erreicht werden?

Vielen Dank für Ihre Hilfe und Ihre Zeit, ich weiß, dass ich ein Buch geschrieben habe. Wenn jemand irgendwelche netten Tutorials kennt, bitte weisen Sie mich darauf hin. Aber bitte - weisen Sie mich nicht auf das Add (int x, int y) -Beispiel, in dem der Client nur add auf dem Host aufruft und das Ergebnis zurückgibt - das habe ich schon einige Male gemacht und es hilft mir nicht, die echte Funktionalität von WCF zu verstehen. Ich versuche wirklich nicht, zu diesem Zeitpunkt etwas Ernstes zu erreichen. Ich versuche wirklich, es einfach zu halten, damit ich lernen kann, was WCF kann, und ich finde die Dokumentation nicht sehr hilfreich. Danke nochmal an alle.

    
Softerware 04.06.2012, 14:09
quelle

2 Antworten

6

Im Allgemeinen wird WCF in einer Anforderungsantwort verwendet, bei der Clients Anfragen stellen; und Serverantworten. Was Sie erreichen wollen, ist ein "Push and Pull" -Dienst. oder in Microsoft-Termini ein Duplex-Service.

Bei Duplexdiensten verbinden sich die Clients einfach mit einem Dienst, und der Dienst registriert sie in einer internen Liste. Und immer wenn ein Ereignis (oder etwas anderes) auftritt, sendet es eine Nachricht an die registrierten Clients. Die Schlüsselbegriffe für WCF im Zusammenhang mit Ihrer Frage ist "Duplex-Dienste" (Sie können google es finden viele Ergebnisse). Sie können sich auf die folgenden Lernprogramme beziehen: msdn oder Codeprojekt

Für den zweiten Teil Ihrer Frage lautet die Antwort ja. Aber das ist nicht so einfach. Sie müssen einige "wcf-Verhaltensweisen" schreiben, zum Beispiel kann ein IInstanceProvider Ihnen helfen. Für alle Anfragen können Sie die Dienstinstanz selbst erstellen, wobei die gewünschten Parameter in die Dienstinstanz eingefügt werden. Folgendes kann hilfreich sein: stackoverflow oder msdn .

Die Frage ist ein bisschen weit und ich bin mir nicht 100% sicher, ob das eine direkte Antwort ist. Aber zumindest unter Verwendung der Schlüsselwörter finden Sie die richtige Richtung.

    
daryal 04.06.2012, 14:40
quelle
3

Haben Sie diesen Artikel schon ausprobiert? Ссылка . Ich dachte, es wäre eine vernünftige Erklärung für Rückrufe. Es behandelt ein Publish / Subscribe-Framework, das eine Lösung für Ihre Anforderung "Keine Abfragen oder Abfragen" darstellt.

    
insipid 04.06.2012 14:37
quelle

Tags und Links