Laden...

Remoting über mehrere Server

Erstellt von Alphawolf1988 vor 12 Jahren Letzter Beitrag vor 12 Jahren 907 Views
A
Alphawolf1988 Themenstarter:in
68 Beiträge seit 2008
vor 12 Jahren
Remoting über mehrere Server

Hallo liebe Community!

Mich beschäftigt derzeit eine Frage über Remoting. Normalerweise gibt es ein ServerObject A und einen Clienten B, welcher dieses Objekt dann per Remotezugriff benutzt. Wie ist das, wenn der Client B ebenfalls ein weiterer Server B mit ServerObjekt B ist und dieser wiederrum erst durch Clienten C benutzt wird.

Also ich rufe eine Funktion von Server B auf und dieser eine Funktion von Server A. Server A gibt an B ein Objekt von MarshalByRef zurück und B gibt dieses weiter an Client C.

Ist dies überhaupt möglich? Und wenn ja wie sieht da die beziehung aus, wenn C auf das Objekt von A zugreift? Geht der Aufruf dann C->B->A oder geht das mit dem Objekt direkt: C->A

Ich hoffe ihr versteht was ich meine.

MFG Chris

Wer zuerst kommt malt zuerst, wer danach kommt malt drüber! 😁

799 Beiträge seit 2007
vor 12 Jahren

Möglich ist das schon stellt sich halt die Frage was du da genau erreichen willst. Prinzipiell suchst du nach einer Relay-Lösung. Hier hat jeman beschrieben wie das funktioniert.

Dann geht das immer über die Zwischenstelle. Also nicht direkt.

As a man thinketh in his heart, so he is.

  • Jun Fan
    Es gibt nichts Gutes, außer man tut es.
  • Erich Kästner
    Krawutzi-Kaputzi
  • Kasperl
6.911 Beiträge seit 2009
vor 12 Jahren

Hallo,

wenn du nicht unbedingt mit Remoting arbeiten musst, sondern auch WCF und speziell ab .net 4.0 verwenden kannst dann gibts das schon out-of-the-box. Siehe A Developer's Introduction to Windows Communication Foundation 4 Abschnitt Routing Service.

mfG Gü

Stellt fachliche Fragen bitte im Forum, damit von den Antworten alle profitieren. Daher beantworte ich solche Fragen nicht per PM.

"Alle sagten, das geht nicht! Dann kam einer, der wusste das nicht - und hat's gemacht!"

3.728 Beiträge seit 2005
vor 12 Jahren

Hallo Alphawolf1988,

Wie ist das, wenn der Client B ebenfalls ein weiterer Server B mit ServerObjekt B ist und dieser wiederrum erst durch Clienten C benutzt wird.

Das geht mit Remoting ohne Probleme.

Also ich rufe eine Funktion von Server B auf und dieser eine Funktion von Server A. Server A gibt an B ein Objekt von MarshalByRef zurück und B gibt dieses weiter an Client C.

Ist dies überhaupt möglich? Ja. Warum soll es denn nicht möglich sein? Streiche mal das Client und Server aus Deinen Gedanken. Du hast Prozesse, die miteinander kommunizieren. Diese Prozesse können (müssen nicht) auf verschiedenen Computern laufen. Angenommen Du hast drei Prozesse A, B und C. Prozess A ruft eine Methode in Prozess B auf. Prozess B ruft wiederum eine Methode von Prozess C auf. Prozess C verarbeitet die Methode und sendet den Rückgabewert zurücl zk B. B sendet seinen Rückgabewert zurück an A. Fertig.

Es könnte aber auch anders laufen: A übergibt einen Verweis auf ein von MarsahlByRef abgleitetes Objekt als Parameter an B. B gibt den Parameter weiter an C. C ruft einen Callback über den erhaltenen Parameter auf, welcher direkt auf A durchschlägt.

Remoting ist sehr vielseitig und kann solche Sachen ohne Probleme und ohne Kopfstände. WCF kann das per Design definitiv nicht. Warum? Weil man bei WCF keine Objektreferenzen übergeben kann. WCF sendet nur Nachrcihten (Daten). Also das, was man bei Remoting als [Serializable] markiert. So etwas wie MarshalByRefObject gibt es in der WCF-Welt nicht.
Der RoutingService von WCF funktioniert anders. Der leitet Nachrichten abhängig vom Inhalt oder bestimmten Merkmalen an bestimmte Services weiter bzw. um. Bei WCF muss man immer alles "explizit" machen. das heißt man muss vieles "irgendwie" in die Hand nehmen, damit sich was tut. Remoting bildet einfach Methodenaufrufe übers Netzwerk ab. So natürlich und intuitiv wie möglich. Das sind zwei ganz verschiedene herangehensweisen.

Obwohl Remoting all solche Dinge kann, musst Du stets gut überlegen ob und wann Du was davon einsetzen willst. Der Einsatz von Events und Callbacks z.B. berauben Dich z.B. jeglicher Möglichkeit für Sacle-Out über mehrere Applikatonsserver, da sich der Client durch das statuswahrende Event-Abo fest an einen bestimmten Server bindet. Features wie Netzwerklastenausgleich etc. funktionieren dann nicht mehr. Wenn Du allerdings niemals sowas wie einen NLB-Cluster brauchen wirst und mit einem einzelnen Server lange auskommst, ist die Event-Geschichte kein Problem und auch nix böses. Und so ist es mit allem. Es kommt drauf an was Du genau machst und welche Anforderungen Du hast. Für einige Fälle werden bestimmte Remoting-Features super geeignet sein, für andere nicht. Für andere Fälle bekommst Du vielleicht mit WCF die besten Ergebnisse.

Was willst Du denn genau machen?

Gruß

Rainbid