【发布时间】:2010-05-20 09:53:04
【问题描述】:
异常是远程处理异常 - 身份验证失败。详细消息显示“无法从传输连接读取数据:连接已关闭。”
我在创建两个可以在 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);
}
【问题讨论】:
标签: c# .net authentication remoting