2009-05-31 7 views
0

Je tente de passer un objet distant en tant que paramètre à une méthode distante, mais j'obtiens une exception de sécurité lorsque l'objet distant tente d'exécuter une méthode sur l'objet distant reçu .Transmission d'un objet distant à une méthode distante en C#

Ceci est un exemple d'objet distant:

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

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

Ceci est le démarreur du serveur (deux exemples de ceci sont en cours d'exécution, une sur 127.0.0.10025, l'autre sur 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; 
} 

Et c'est le client:

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)); 
} 

Comment puis-je passer correctement server1 en tant que paramètre à la getRemoteMessage méthode?

Répondre

0

J'ai écrit ce type de code auparavant, mais je n'ai jamais essayé de passer un objet serveur à un autre objet serveur de cette manière. Je ne suis pas un expert en sécurité, mais je peux comprendre pourquoi cela pourrait ne pas être autorisé.

Vous devez obtenir le message directement à partir de Server1, plutôt que de demander à un autre serveur distant de le renvoyer. En d'autres termes, votre logique de recherche de message doit être dans le client.

+0

C'était juste un exemple de code pour démontrer le problème. Dans mon code réel, SharpRemotingDLL est une classe exportant les opérations de fichiers de base (CreateFile, ReadFile etc.) et j'utilise un synthax similaire pour implémenter CopyFile et MoveFile entre deux serveurs: user use server1.CopyFile ("foo. txt », server2) méthode CopyFile: CopyFile public void (String name, serveur SharpRemotingDLL) {server.WriteFile (nom, this.ReadFile (nom)); } – vbigiani

+0

Quelle est la formulation exacte du message d'erreur? –

+0

Je ne peux pas traduire exactement parce que mon système d'exploitation est en italien, et googling pour le message d'erreur n'est pas utile. Quoi qu'il en soit: http://pastebin.com/m6219b56f – vbigiani

Questions connexes