我在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;
    }

10-06 06:44