我在TcpChannel
上遇到了一些麻烦。我想创建一个通道,对一个对象(例如服务器)进行远程访问,然后完成所有操作,然后关闭该通道。问题是我以后可能需要在相同的端口中重新打开相同的通道,而我在尝试执行此操作时遇到了一些困难。
出于连接目的,我只做:
var channel = new TcpChannel(port);
Console.WriteLine("Start Connection received at Server");
ChannelServices.RegisterChannel(channel, false);
//Initiate remote service as Marshal
RemotingServices.Marshal(this, "Server", typeof(Server));
然后关闭它,我只是做:
Console.WriteLine("Stop Connection at Server");
channel.StopListening(null);
RemotingServices.Disconnect(this);
ChannelServices.UnregisterChannel(channel);
channel = null;
此后,如果我尝试创建一个新的tcpChannel实例,则会出现一个异常,说tcpChannel连接是唯一的,它们必须位于不同的端口上。
那么,如何关闭tcpChannel? :S
提前致谢。
最佳答案
您的关闭代码正在工作。
重新检查日志,您会在某处错过“服务器停止连接”。
更新:
有我的日志(无错误):
服务器收到启动连接
在服务器上停止连接
服务器收到启动连接
在服务器上停止连接
有执行代码:
private void button1_Click(object sender, EventArgs e)
{
channel = new TcpChannel(port);
Trace.WriteLine("Start Connection received at Server");
ChannelServices.RegisterChannel(channel, false);
//Initiate remote service as Marshal
RemotingServices.Marshal(this, "Server", typeof(Server));
}
private void button2_Click(object sender, EventArgs e)
{
Trace.WriteLine("Stop Connection at Server");
channel.StopListening(null);
RemotingServices.Disconnect(this);
ChannelServices.UnregisterChannel(channel);
channel = null;
}