Открыть канал удаленного взаимодействия TCP на конкретном порту

Я хочу открыть порт tcp для обратных вызовов.Net Remoting в приложении, которое будет работать на терминальном сервере, где несколько одновременно работающих пользователей будут выполнять и запускать приложение, и каждый должен иметь возможность видеть входящие сообщения о событиях обратного вызова. В настоящее время, когда я пытаюсь открыть порт и зарегистрировать канал в приложении, я использую следующее:

    private static void RegisterCallBackChannel(int callBackPort)
    {
        var clientProvider = new BinaryClientFormatterSinkProvider();
        var serverProvider = new BinaryServerFormatterSinkProvider 
                {TypeFilterLevel = TypeFilterLevel.Full};

        IDictionary props = new Hashtable();
        var chanNm = string.Format("CallBackChanPort:{0}", callBackPort);
        props["port"] = callBackPort;
        props["name"] = chanNm;
        props["typeFilterLevel"] = TypeFilterLevel.Full;

        if (ChannelServices.RegisteredChannels.Any(
            chn =>  chn is TcpChannel &&  chn.ChannelName == chanNm))
                return;
        var chan = new TcpChannel(props, clientProvider, serverProvider);
        ChannelServices.RegisterChannel(chan, true);
    }

это работает для первого пользователя, но когда второй параллельный пользователь запускает приложение в своем сеансе пользователя, код.Net ChannelServices.RegisteredChannels не содержит канал, открытый первым пользователем, но, конечно, строку кода

var chan = new TcpChannel(props, clientProvider, serverProvider);   

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

Как мне это сделать? Даже если бы я мог определить, открыт ли уже определенный порт, могут ли приложения в одном сеансе пользователя видеть входящие сообщения о событиях на канале, созданном из другого сеанса пользователя?

0 ответов

Другие вопросы по тегам