如何在.NET中删除TcpChannel对象

时间:2011-04-09 18:29:57

标签: c# .net network-programming

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

提前致谢。

3 个答案:

答案 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。