2009-05-31 5 views
0

Ich versuche, ein Remote-Objekt als Parameter an eine Remote-Methode zu übergeben, aber ich bekomme eine Sicherheitsausnahme, wenn das Remote-Objekt versucht, eine Methode für das Remote-Objekt auszuführen .Übergeben Sie ein Remote-Objekt an eine Remote-Methode in C#

Dies ist ein Beispiel entferntes Objekt:

public class SharpRemotingDLL : MarshalByRefObject 
{ 
    public String getRemoteMessage(SharpRemotingDLL server) 
    { 
     // the exception is raised here 
     return server.getMessage(); 
    } 

    public String getMessage() 
    { 
     return "Hello World!"; 
    } 
} 

Dies ist die Starter-Server (zwei Instanzen von diesem ausgeführt wird, ein auf 127.0.0.10025, die andere auf 127.0.0.10026):

public static int Main(string[] args) 
{ 
    TcpServerChannel channel; 
    channel = new TcpServerChannel(10025); 
    ChannelServices.RegisterChannel(channel, false); 
    RemotingConfiguration.RegisterWellKnownServiceType(
     typeof(SharpRemotingDLL), 
     "SharpRemotingDLL", 
     WellKnownObjectMode.Singleton); 
    Console.ReadLine(); 
    return 0; 
} 

Und dies ist der Kunde:

static void Main(string[] args) 
{ 
    SharpRemotingDLL server0 = (SharpRemotingDLL) 
     Activator.GetObject(typeof(SharpRemotingDLL), 
     "tcp://localhost:10025/SharpRemotingDLL"); 
    SharpRemotingDLL servers[1] = (SharpRemotingDLL) 
     Activator.GetObject(typeof(SharpRemotingDLL), 
     "tcp://localhost:10026/SharpRemotingDLL"); 
    Console.WriteLine(server0.getRemoteMessage(server1)); 
} 

wie richtig ich server1 als Parameter an die getRemoteMessage passieren Methode?

Antwort

0

Ich habe diese Art von Code zuvor geschrieben, aber ich habe noch nie versucht, ein Serverobjekt auf diese Weise an ein anderes Serverobjekt zu übergeben. Ich bin kein Sicherheitsexperte, aber ich kann spüren, warum das nicht erlaubt ist.

Sie sollten die Nachricht direkt von Server1 erhalten, anstatt einen anderen Remote-Server zur Rückgabe zu bitten. Mit anderen Worten, Ihre Nachrichtenabruflogik muss sich im Client befinden.

+0

Das war nur ein Beispielcode, um das Problem zu demonstrieren. In meinem echten Code ist SharpRemotingDLL eine Klasse, die grundlegende Dateioperationen exportiert (CreateFile, ReadFile etc.) und ich benutze einen ähnlichen Synthax, um CopyFile und MoveFile zwischen zwei Servern zu implementieren: server1.CopyFile ("foo. txt“, server2) Copyfile Methode: public void Copyfile (String name, SharpRemotingDLL server) { server.WriteFile (Name, this.ReadFile (name)); } – vbigiani

+0

Wie lautet der genaue Wortlaut der Fehlermeldung? –

+0

Ich kann nicht genau übersetzen, weil mein Betriebssystem auf Italienisch ist, und googeln für die Fehlermeldung ist nicht hilfreich. Anyway: http://pastebin.com/m6219b56f – vbigiani

Verwandte Themen