Как удалить объект TcpChannel в .NET - PullRequest
2 голосов
/ 09 апреля 2011

У меня проблемы с 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 ]

1 голос
/ 10 апреля 2011

ваш закрытый код работает.
перепроверить журналы, вы пропустите где-нибудь «Остановить соединение на сервере».

Обновление:

там мой лог (без ошибок) :
Начать соединение получено на сервере
Остановить соединение на сервере
Начать соединение получено на сервере
Остановить соединение на сервере

там код реализации:

    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;
    }
0 голосов
/ 11 апреля 2011

Вам необходимо установить для свойства канала: exclusiveAddressUse значение false.

0 голосов
/ 09 апреля 2011

Если вы просто хотите остановить и начать прослушивание на том же порту, вам нужно явно позвонить начать прослушивание . Вы можете потерять последние три строки кода после StopListening и сохранять и использовать объект до тех пор, пока ваше приложение не выйдет из строя.

channel = new TcpChannel(port);
channel.StartListening(data)
...