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
提前致谢。
答案 0 :(得分:1)
您的密码正常运行 重新检查日志,你错过了“在服务器上停止连接”某处。
<强>更新强>
我的日志(无错误):
在服务器上收到启动连接
停止服务器连接
在服务器上收到启动连接
停止服务器连接
有实现代码:
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;
}
答案 1 :(得分:0)
如果您只想停止并开始在同一端口上侦听,则需要明确调用start listening。您可以在StopListening之后松开代码的最后三行,并保留并重用该对象,直到您的应用程序停止运行。
channel = new TcpChannel(port);
channel.StartListening(data)
答案 2 :(得分:0)
您需要将channel属性:exclusiveAddressUse设置为false。