Открыть канал удаленного взаимодействия TCP на конкретном порту - PullRequest
2 голосов
/ 20 января 2012

Я хочу открыть 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);   

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

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

...