Исключением является исключение удаленного взаимодействия - ошибка аутентификации. В подробном сообщении говорится: «Невозможно прочитать данные из транспортного соединения: соединение было закрыто».
У меня проблемы с созданием двух простых серверов, которые могут взаимодействовать как удаленные объекты в C #. ServerInfo - это просто класс, который я создал, который содержит IP и порт и может вернуть адрес. Он работает нормально, как я использовал его раньше, и я отладил его. Также сервер запускается просто отлично, исключение не выдается, и канал регистрируется без проблем. Я использую Forms для создания интерфейсов и вызова некоторых методов на сервере, но не нашел никаких проблем при передаче параметров из FormsApplication на сервер при отладке. В этой главе все выглядит хорошо.
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());
}
}
Я запускаю два экземпляра этой программы. Затем startNode вызывается на одном из экземпляров приложения. Порт в порядке, сгенерированный адрес также в порядке. Как видите, я использую IP для localhost, так как этот сервер только для целей тестирования.
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);
}
Затем, в другом случае, через интерфейс снова я вызываю другой метод startNode, предоставляя ему начальный сервер для получения информации. Вот где это идет не так. Когда он вызывает метод только что полученного прокси-сервера seedServer, возникает исключение RemotingException из-за ошибки аутентификации. (Параметр, который я хочу получить, это узел, я просто использую int, чтобы убедиться, что класс ChordNode не имеет ничего общего с этой ошибкой.)
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);
}