Открыть канал удаленного взаимодействия 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);
происходит сбой, потому что вы не можете открыть два канала на одном и том же порту на одном компьютере, даже если они находятся в разных пользовательских сеансах.
Как мне это сделать? Даже если бы я мог определить, открыт ли уже определенный порт, могут ли приложения в одном сеансе пользователя видеть входящие сообщения о событиях на канале, созданном из другого сеанса пользователя?