tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
6
ZUGRIFFE
3268
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Avatar von Sunray
    Sunray Sunray ist offline Mitglied Gold
    Registriert seit
    Sep 2003
    Ort
    Schweiz
    Beiträge
    190
    Hi,
    ich versuche mich gerade an .NET Remoting. Bisher bin ich sowohl bei TCP-Sockets wie auch bei DirectPlay gescheitert.

    Ich habe einen Client, der sich mit Servern in meinem Netzwerk verbinden kann, um dann Informationen über laufende Prozesse, geöffnete Fenster, RAM Auslastung usw. anzeigt (Alles, was man eben so über WMI/.NET in Erfahrung bringen kann) .

    Funktioniert alles super. Nur wenn ein Computer heruntergefahren wird, während ich auf Remoteobjekte zugreife, wird mir nach etwa 10sek Wartezeit eine hübsche SocketException entgegengeschleudert. Ich möchte jetzt entweder wissen, wie ich überprüfen kann, ob eine Verbindung noch steht (eine
    Art Ping also) oder wie ich Events über das Netzwerk behandeln kann, denn beim anfügen des EventHandlers erhalte ich immer eine recht seltsame SecurityException (Auch bei FullTrust), die irgend etwas vom Deserialisieren von DelegateHolder schreibt.

    Wer hat ne Idee?
     
    Zu jedem Problem gibt es mindestens eine Lösung.
    Zu jeder Lösung gibt es mindestens eine bessere Lösung

  2. #2
    Avatar von Christian Kusmanow
    Christian Kusmanow Christian Kusmanow ist offline Mitglied Diamant
    Registriert seit
    Aug 2004
    Ort
    Aachen (NRW)
    Beiträge
    2.208
    Blog-Einträge
    15
    Fang doch die Exception ab. Dann versuchst Du deinen Client anzupingen oder die Verbindung wieder aufzubauen.
    Wenn es dann nicht klappt weißt Du, das dein Client nicht mehr verfügbar ist.

    MFG cosmo
     
    MfG,
    Christian

    Wer sein Problem definiert, hat es schon halb gelöst!

    Bitte markiert eure Themen als erledigt. Sonst macht so ein Forum als Nachschlagewerk keinen Sinn.

    The Code Project! - C# Programming | C# / VB.NET Pendants

    Regeln + Netiquette

    Liebe FIAEs, verlasst euch nicht auf das was in der Berufsschule "vermittelt" wird
    und vor allem nicht auf das, was euch die IHK dazu erzählt!
    Die haben so viel Ahnung von dem Gewerk, wie der Bundestag vom Haushalt...

  3. #3
    Avatar von Sunray
    Sunray Sunray ist offline Mitglied Gold
    Registriert seit
    Sep 2003
    Ort
    Schweiz
    Beiträge
    190
    Hab ich jetzt gemacht, ist allerdings nicht besonders befriedigend, weil meine Anwendung für einige Senkunden lahm gelegt ist. Mir wäre lieber, wenn der Server ankündigen könnte, wenn er beendet wird.
    Klar könnte ich alle Interaktionen mit dem Server in einem seperaten Thread laufen lassen, aber das wollte ich eigentlich nicht...
     
    Zu jedem Problem gibt es mindestens eine Lösung.
    Zu jeder Lösung gibt es mindestens eine bessere Lösung

  4. #4
    Avatar von Christian Kusmanow
    Christian Kusmanow Christian Kusmanow ist offline Mitglied Diamant
    Registriert seit
    Aug 2004
    Ort
    Aachen (NRW)
    Beiträge
    2.208
    Blog-Einträge
    15
    Du wirst aber nicht drum herum kommen, wenn Du ein bentuzerfreundliches Programm schreiben willst.
    Schreib Dir eine Klasse, die für die asynchrone SocketConnection zuständig ist, bau Eventhandler ein und führe diese in einem Thread aus. Das ist alles.
    Und ich gehe mal davon aus, dass Du schon bei deinem Server ein Array voll Threads hast, in welchem lauter ClientManager laufen. Also sollte das auch kein Problem für Dich darstellen.

    Und drück Dich mal bitte deutlicher aus. Du wolltest erst feststellen ob die Verbindung überhaupt noch steht.

    Wenn Du möchtest das dein Server ankündigt, wenn er beendet wird, dann impementiere doch eine Meldung dafür.

    Wer ein Problem definiert, hat es schon halb gelöst.

    MFG cosmo
    Geändert von Christian Kusmanow (19.11.04 um 12:23 Uhr) Grund: rechtschreibung
     
    MfG,
    Christian

    Wer sein Problem definiert, hat es schon halb gelöst!

    Bitte markiert eure Themen als erledigt. Sonst macht so ein Forum als Nachschlagewerk keinen Sinn.

    The Code Project! - C# Programming | C# / VB.NET Pendants

    Regeln + Netiquette

    Liebe FIAEs, verlasst euch nicht auf das was in der Berufsschule "vermittelt" wird
    und vor allem nicht auf das, was euch die IHK dazu erzählt!
    Die haben so viel Ahnung von dem Gewerk, wie der Bundestag vom Haushalt...

  5. #5
    Avatar von Sunray
    Sunray Sunray ist offline Mitglied Gold
    Registriert seit
    Sep 2003
    Ort
    Schweiz
    Beiträge
    190
    Zitat Zitat von cosmochaosmaker
    Wenn Du möchtest das dein Server ankündigt, wenn er beendet wird, dann impementiere doch eine Meldung dafür.
    Genau das habe ich ja auch versucht. Mit Remoting kann ich zwar jetzt auf Initiative des Clients Informationen anfordern, aber wenn der Server von sich aus Daten senden soll, werde ich hängen gelassen. Klar kommst du jetzt mit Events und Delegates, aber genau das ist ja das Problem. Ich kann den Events keine EventHandler zuweisen, weil .NET versucht das Delegate übers Netzwerk zu übertragen, was in einer Exception endet.

    Zugegeben, ich kenne mich in Remoting nicht besonders gut aus, habe aber bis jetzt noch keinen Weg gefunden mit demselben Objekt sowohl Clientseitige Anfragen, wie auch Serverseitige Initiative zu ermöglichen. Deshalb habe ich nicht nach "Wie funktionieren Events in Remoting" sondern allgemeiner gefragt, weil ich gehofft hatte, dass es irgendwo versteckt im System.Runtime.Remoting Namespace ein geeignetes Werkzeug gibt. (oder so ähnlich)
     
    Zu jedem Problem gibt es mindestens eine Lösung.
    Zu jeder Lösung gibt es mindestens eine bessere Lösung

  6. #6
    Avatar von Christian Kusmanow
    Christian Kusmanow Christian Kusmanow ist offline Mitglied Diamant
    Registriert seit
    Aug 2004
    Ort
    Aachen (NRW)
    Beiträge
    2.208
    Blog-Einträge
    15
    Zitat Zitat von Sunray
    Ich kann den Events keine EventHandler zuweisen, weil .NET versucht das Delegate übers Netzwerk zu übertragen, was in einer Exception endet.
    Das ist logisch!
    Ich meinte auch:
    Schreib Dir eine Klasse, die für die asynchrone SocketConnection zuständig ist, bau Eventhandler ein und führe diese in einem Thread aus. Das ist alles.
    Du solltest Dir auch deine eigenen Events für deinen Client implementieren.

    Client:
    Die KommunikationsKlasse vom läuft in einem Thread. Wenn ein ein Ereigniss wie der Serververlust eigetreten ist, wird dann dein eigenes Event OnConnectionLost(wenn Du es implementiert hast) ausgelöst. Damit hat dein Clientprogramm die Chance was mit der Situation anzufangen.

    Server:
    Hat ein Array voll mit ClientManagern. Damit meine ich, dass Du Dir eine Klasse schreibst welche den Client mit Services bedient ( ich habe das schon asynchron implementiert ).
    Jetzt brauchst Du ein Array mit Clientmanagern und ein Thread Array mit ganau soviel Stellen. Du kannst das natürlich auch dynamisch gestalten.
    Ein anderer HauptThread prüft zyklisch nach neuen VerbundungsAnforderungen. Wenn ein Client gefunden wurde, wird er an einen freien Clientmanager übergeben der jetzt in dem dazugehörigen Thread im ThreadArray ausgeführt wird.

    Du kannst Dir aber alternativ auch noch Sockets, TCPListener und TCPClient anschauen. Vielleicht kannst damit noch was anfangen.

    MFG cosmo
     
    MfG,
    Christian

    Wer sein Problem definiert, hat es schon halb gelöst!

    Bitte markiert eure Themen als erledigt. Sonst macht so ein Forum als Nachschlagewerk keinen Sinn.

    The Code Project! - C# Programming | C# / VB.NET Pendants

    Regeln + Netiquette

    Liebe FIAEs, verlasst euch nicht auf das was in der Berufsschule "vermittelt" wird
    und vor allem nicht auf das, was euch die IHK dazu erzählt!
    Die haben so viel Ahnung von dem Gewerk, wie der Bundestag vom Haushalt...

  7. #7
    Avatar von Sunray
    Sunray Sunray ist offline Mitglied Gold
    Registriert seit
    Sep 2003
    Ort
    Schweiz
    Beiträge
    190
    Zitat Zitat von cosmochaosmaker
    Wenn ein ein Ereigniss wie der Serververlust eigetreten ist, wird dann dein eigenes Event OnConnectionLost(wenn Du es implementiert hast) ausgelöst.
    Daran habe ich ja auch schon gedacht aber wie erfährt meine Klasse, dass der Server ein Problem hat, bzw. wie sendet mein Server ein Signal. Wir reden hier von .NET Remoting Objekten und nicht von einer Socket-Connection. Alles, was ich in der Hand halte, sind Remote-Objekte und nicht TCP-Connections usw. Die Verbindungsverwaltung auf dem Server wird von .NET übernommen. Ich habe ein grundsätzliches Problem: Mit Remoteobjekten kann ich anscheinend nur Methoden auf dem Server aufrufen. Dh. der Server schickt mir nur Daten, wenn ich ihn per Methodenaufruf darum "bitte". Er ist nicht in der Lage mir selbstsrändig etwas mitzuteilen.

    Ich möchte das Problem mit .NET Remoting lösen und nicht nochmal mit TCP&co von vorne beginnen.
     
    Zu jedem Problem gibt es mindestens eine Lösung.
    Zu jeder Lösung gibt es mindestens eine bessere Lösung

Ähnliche Themen

  1. Remoting! Fehler im Server!
    Von PuddingPinguin im Forum .NET Web und Kommunikation
    Antworten: 0
    Letzter Beitrag: 06.04.08, 16:07
  2. .NET Remoting, 1x Client auf mehrere Server
    Von vrumfondel im Forum .NET Web und Kommunikation
    Antworten: 0
    Letzter Beitrag: 12.03.07, 17:30
  3. Zyklisch prüfen ob der Server noch läuft
    Von Timo Rickert im Forum Linux & Unix
    Antworten: 3
    Letzter Beitrag: 03.11.05, 16:37
  4. Remoting und Events im Server-Objekt
    Von jgeske im Forum .NET Archiv
    Antworten: 8
    Letzter Beitrag: 30.12.04, 19:37
  5. Remoting Server beenden
    Von Alphamännchen im Forum .NET Archiv
    Antworten: 2
    Letzter Beitrag: 14.05.04, 11:09