views:

172

answers:

0

The exception is Remoting Exception - Authentication Failure. The detailed message says "Unable to read data from the transport connection: the connection was closed."

I'm having trouble with creating two simple servers that can comunicate as remote objects in C#. ServerInfo is just a class I created that holds the IP and Port and can give back the address. It works fine, as I used it before, and I've debugged it. Also the server is starting just fine, no exception is thrown, and the channel is registered without problems. I'm using Forms to do the interfaces, and call some of the methods on the server, but didn't find any problems in passing the parameters from the FormsApplication to the server when debugging. All seems fine in that chapter.

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

I run two instances of this program. Then startNode is called on one of the instances of the application. The port is fine, the address generated is fine as well. As you can see, I'm using the IP for localhost, since this server is just for testing purposes.

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

            }

Then, in the other istance, through the interface again, I call another startNode method, giving it a seed server to get information from. This is where it goes wrong. When it calls the method on the seedServer proxy it just got, a RemotingException is thrown, due to an authentication failure. (The parameter I'll want to get is the node, I'm just using the int to make sure the ChordNode class has nothing to do with this error.)

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

        }