Ich habe ein Client/Server-Modell in C# mit. Net Remoting geschrieben. Wenn ich den Client mit dem Server verbunden habe, dann töte den Server und starte ihn neu, ohne zu versuchen, irgendwelche Server-Methoden vom Client anzurufen, während der Server heruntergefahren ist, kann ich glücklich wieder verbinden.Client/Server-Verbindung Probleme
Wenn ich den Server schließe, dann versuche, den Server vom Client aus zu pingen (was ich aus einem separaten Thread mache, um eine endlose Wartezeit zu vermeiden), wenn der Server wieder online ist, kann der Client nie mit ihm und meinem Ping sprechen Thread, der während der Downtime ausgelöst wurde, wartet immer tief im Inneren der Remoting-Bibliotheken. Ich versuche, dies abzubrechen (wenn versucht wird, den Thread zu verbinden, scheitert nach kurzer Zeit), aber es wird nicht abgebrochen. Ich frage mich, ob das ein Teil des Problems ist.
Wenn ich einen anderen Client starte, kann dieser Client gut mit dem Server sprechen. Ich dachte, dass ich einige Aspekte des ursprünglichen Clients neu starten musste, aber nicht sehen konnte, was heruntergefahren werden musste. Ich annulliere mit Sicherheit den Server, mit dem ich verbunden bin, und rufe Activator.GetObject mit der gleichen Adresse auf (etwas, das der zweite Client tut, um sich mit dem Server zu verbinden, was gut funktioniert), aber die Wiederherstellung des Servers hilft überhaupt nicht.
Der Server wird über RegisterWellKnownServiceType als Singleton ausgeführt.
Es klingt wie WCF ist der Weg zu gehen. Es betäubt mich nur, dass ein altes (und daher gut verwendetes und debugged) API wie Remoting solche Probleme mit etwas hat, das sein Brot und Butter sein sollte. Danke für den Hinweis. –
Nun, DCOM ist eine ältere, weit verbreitetere API (untermauert zum Beispiel WMI), hat aber noch mehr Probleme als .NET-Remoting (besonders wenn man nach Sicherheit strebt). IIOP war alles andere als. Ein Teil der Antwort ist, dass .NET-Remoting immer die zweite Geige für Web-Services gespielt hat, aber Teil ist, dass Remoting-Protokolle einfach nur schwer zu entwerfen und zu implementieren sind, um alle Fälle abzudecken ... –