Frage

Ich entwickle ein Master-Slave-Befehlsmodell von denen einige Anwendung „Master“ Befehle homogene Prozesse als „Slave“ sendet eine bestimmte Aufgabe zu tun und dann mit dem Status vollständig oder Prozessfehler reagieren zurück. sie sollten auch einige Daten an den Master auf Anfrage aus.

Was würde dieses Modell aussehen in WCF?

würde Meister und jede Instanz von Slave-Host thier eigene Dienste? würde nur Master-Host? nur Slave? Sollte ich mit Rückruf Verträge sein? Datenverträgen? oder Serviceverträge.

Als Randbemerkung, ist dies eine geringe Bandbreite, geringe Intensität, nur intern für die Produktprüfung verwendete Verteilung Projekt und nicht als „große hohe Nachfrage“ Projekt in Betracht gezogen werden sollte.

War es hilfreich?

Lösung

Sie werden auf jeden Fall Serviceverträge haben - ein Muss - in irgendeiner Form. Dies definiert nur Ihren Service und die Operationen (Methoden) darauf (Operation).

Wenn es ein intern „hinter der Firewall“ -System, Sie bei einem Duplex aussehen könnten Bindung, z.B. hat den Masteraufruf die Slave und den Slave-Bericht zurück auf einem Duplex-Kanal, wenn es fertig ist. Out of the box, gibt es nur die WSDualHttpBinding duplex zu unterstützen, aber da Sie intern sind, hinter der Firewall könnten Sie Ihren eigenen TCP-basierten Duplex zu schaffen Bindung (es ist nicht so schwer aussehen wollen wie es klingen mag an zuerst!).

In diesem Szenario beiden beteiligten Anwendungen wirklich sind Server und Client zur gleichen Zeit.

Sie Datacontracts in irgendeiner Weise, Form haben oder bilden die Daten zu definieren, die um zwischen Master und Slave bewegt wird -. So wieder, ja, Sie haben Daten Verträge haben

EDIT: Natürlich könnte ein anderer Ansatz zwei Warteschlangen MSMQ Nachricht zu verwenden; der Meister lässt seinen „Job“ Anforderung in eine Warteschlange, die der Slave hört auf und nimmt den Job Anfrage. Wenn der Slave getan wird, ist es wiederum fällt eine Antwort in die Antwortwarteschlange zu dem der Meister ein Zuhörer ist, und wird der Job mitgeteilt, dass Art und Weise getan wird.

Marc

Andere Tipps

ich mit Jeremy stimmen hier .. Was Sie beschreiben die Komplexität der Callback-Verträge nicht braucht. Die Arbeiter Knoten könnte einfach einen WCF-Dienst (oder sogar eine WSDL oder REST Web-Service für diese Angelegenheit ...) aussetzen und dann würde der Controller müssen nur die URLs von jedem der untergeordneten Knoten kennen und Nachrichten an die Arbeiter Knoten senden.

Wenn Sie die Steuerung in der Lage sein wollen, eine einzelne Nachricht senden und haben alle Arbeiter (Ich mag nicht wirklich die Master / Slave-Analogie ... ich vor langer Zeit schaltete es dem Aufruf Controller / Arbeiter) Knoten als Reaktion etwas tun und stellen ihre Fortschritte zu der Gruppe zurück, dann mögen Sie vielleicht den oft unterschätzten P2P Kanal innerhalb von WCF verwenden. Dies ermöglicht eine Gruppe von Diensten in WCF geschrieben miteinander auf einmal als Peers zu sprechen mit URLs wie Separatoren Thema / Konversation fast verwendet werden.

So zum Beispiel könnten Sie Befehle ausgeben auf dem net.p2p: // Labore / Befehle Kanal. Nur der Controller sendet Befehle auf diesem Kanal aber alle der Arbeiter Knoten hören. // labs / status Kanal: Wenn sie fertig sind ihre Sache asynchron tun, können sie Fortschritte bei der net.p2p berichten. Ein weiterer Vorteil dieses Ansatzes besteht darin, dass (wenn Sie diese Funktion benötigen), wobei die einzelnen Arbeitnehmer die Möglichkeit, die anderen Arbeiter alle zu wissen, gewinnen würde, was tun.

Beachten Sie jedoch, dass, wenn Sie P2P verwenden dann werden Sie mit Streit zu tun haben - Sie mit zwei Knoten kann am Ende den gleichen Befehl zu akzeptieren. Wenn diese in Ordnung ist, dann ist P2P Ihr Werkzeug. Wenn Sie Befehle müssen ausgegeben werden und nahm nur bis seriell durch einzelne Knoten, wie sie frei werden (eine wahrscheinlichere Szenario, wenn Remote-Knoten zu sagen einzelnen Testskripte ausführen, etc), dann können Sie eine MSMQ-Bindung statt P2P verwenden. Dann alle Arbeiter werden Clients, die Nachrichten aus der Warteschlange empfangen und Sie können leichter die Situation mehrerer Arbeiter entgegenzuwirken die gleiche Anfrage zu akzeptieren.

Weitere Referenz: einem Blog-Post ich eine Weile zurück auf den Peer-Kanal geschrieben.

Peer Channel-Szenarien auf MSDN - Das ist gut, weil Sie gehen kann von hier aus Kanal Konzepten zur Referenz Leitfaden für Peer.

Peer Channel-Team Blog

Wenn die Slave-Verarbeitung eine lange Zeit dauern wird, dann Verträge Rückruf könnte in Ordnung sein. Sonst könnte man nur in dem Master-Block für den Slave warten zu vervollständigen (möglicherweise Ihre WCF-Client-Konfiguration anpassen müssen, damit sie nicht heraus Zeit).

Auf der Basis Ihrer Beschreibung, ich glaube, Sie würden wirklich nur den WCF-Dienst auf dem Slave-Knoten hosten müssen, und der Meister konnte nur ein Client raubend die WCF-Dienste von dem Slaves ausgesetzt sein.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top