L'exception est Remoting Exception - Authentication Failure. Le message détaillé indique "Impossible de lire les données de la connexion de transport: la connexion a été fermée."Impossible de lire les données de la connexion de transport: la connexion a été fermée
J'ai des problèmes avec la création de deux serveurs simples qui peuvent communiquer en tant qu'objets distants en C#. ServerInfo est juste une classe que j'ai créée qui contient l'adresse IP et le port et peut rendre l'adresse. Cela fonctionne bien, comme je l'ai déjà utilisé, et je l'ai débogué. De plus, le serveur démarre correctement, aucune exception n'est levée et le canal est enregistré sans problème. J'utilise Forms pour faire les interfaces, et appelle certaines des méthodes sur le serveur, mais n'a pas trouvé de problèmes en passant les paramètres de FormsApplication au serveur lors du débogage. Tout semble bien dans ce chapitre.
public ChordServerProgram()
{
RemotingServices.Marshal(this, "PADIBook");
nodeInt = 0;
}
public void startServer()
{
try
{
serverChannel = new TcpChannel(serverInfo.Port);
ChannelServices.RegisterChannel(serverChannel, true);
}
catch (Exception e)
{
Console.WriteLine(e.ToString());
}
}
Je cours deux instances de ce programme. Ensuite, startNode est appelé sur l'une des instances de l'application. Le port est bien, l'adresse générée est bien aussi. Comme vous pouvez le voir, j'utilise l'adresse IP pour localhost, car ce serveur ne sert qu'à tester.
public void startNode(String portStr)
{
IPAddress address = IPAddress.Parse("127.0.0.1");
Int32 port = Int32.Parse(portStr);
serverInfo = new ServerInfo(address, port);
startServer();
//node = new ChordNode(serverInfo,this);
}
Puis, dans l'autre istance, à travers l'interface à nouveau, j'appelle une autre méthode startNode, lui donnant un serveur de semences pour obtenir des informations à partir. C'est là que ça ne va pas. Quand il appelle la méthode sur le proxy seedServer qu'il vient de recevoir, une exception RemotingException est lancée, en raison d'un échec d'authentification. (Le paramètre Je veux obtenir est le nœud, je suis juste en utilisant l'int pour vous assurer que la classe ChordNode n'a rien à voir avec cette erreur.)
public void startNode(String portStr, String seedStr)
{
IPAddress address = IPAddress.Parse("127.0.0.1");
Int32 port = Int32.Parse(portStr);
serverInfo = new ServerInfo(address, port);
IPAddress addressSeed = IPAddress.Parse("127.0.0.1");
Int32 portSeed = Int32.Parse(seedStr);
ServerInfo seedInfo = new ServerInfo(addressSeed, portSeed);
startServer();
ChordServerProgram seedServer = (ChordServerProgram)Activator.GetObject(typeof(ChordServerProgram), seedInfo.GetFullAddress());
// node = new ChordNode(serverInfo,this);
int seedNode = seedServer.nodeInt;
// node.chordJoin(seedNode.self);
}
Oui, mais si nous voulons que la sécurité soit activée? – Gareth