Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
Remoting über mehrere Server
Alphawolf1988
myCSharp.de - Member



Dabei seit:
Beiträge: 68

Themenstarter:

Remoting über mehrere Server

beantworten | zitieren | melden

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!
private Nachricht | Beiträge des Benutzers
der-schlingel
myCSharp.de - Member

Avatar #avatar-3239.jpg


Dabei seit:
Beiträge: 820
Herkunft: Österreich/Wien

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers
gfoidl
myCSharp.de - Team

Avatar #avatar-2894.jpg


Dabei seit:
Beiträge: 7559
Herkunft: Waidring

beantworten | zitieren | melden

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!"
private Nachricht | Beiträge des Benutzers
Rainbird
myCSharp.de - Experte

Avatar #avatar-2834.jpg


Dabei seit:
Beiträge: 3953
Herkunft: Mauer

beantworten | zitieren | melden

Hallo Alphawolf1988,
Zitat von 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.
Zitat von Alphawolf1988
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
private Nachricht | Beiträge des Benutzers