2010-12-16 12 views
0

I RemoteRamdom Klasse auf dem Server haben:.NET Remoting - Proxy Problem

SERVER:

public class RemoteRandom : MarshalByRefObject 
{ 
    Random r = new Random(); 

    public Random GetRandomObject() 
    { 
     return r; 
    } 
} 

CLIENT:

 RemoteRandom remoteRandom = (RemoteRandom)Activator.GetObject(typeof(RemoteRandom), "tcp://localhost:1000/UzakNesne"); 
     Random r = remoteRandom.GetRandomObject(); 

     while (true) 
     { 
      Console.WriteLine(r.Next()); 
     } 

Das Problem: Der Client kann GetRandomObject rufen Methode erfolgreich . Wenn ich jedoch die Methoden von r instance aufruft, wird es lokal ausgeführt. Ich meine, r.Next() arbeitet weiter, selbst wenn ich die Serveranwendung schließe.

Wie kann ich auf dem Server arbeiten?

Antwort

0

Sind Sie sicher, es ist ein Remote-Objekt?

Ihr Code zeigt grundsätzlich nicht die Konfiguration an, die den Activator so umlenkt, dass er die Klasse tatsächlich von einem Server referenziert. Unabhängig von der Konfiguration erstellt der Aktivator eine LOKALE KLASSE.

+0

Konfiguration erfolgt durch .config-Datei in der Lösung. Ich habe die Details einfach übersprungen. –

0

Das zurückgegebene Objekt r wird serialisiert und lokal neu erstellt, da die Random-Klasse als serialisierbar gekennzeichnet ist und nicht von MarshalByRefObject erbt.

Sie können r auf dem Server auf die gleiche Weise erstellen, wie Sie remoteRandom erstellen, obwohl Sie nur vom Client darauf zugreifen können.