在特定端口上打开tcp远程通道

时间:2012-01-20 03:30:19

标签: .net .net-remoting tcpchannel

我想在将在终端服务器上运行的应用程序中打开.Net Remoting回调的tcp端口,其中多个并发用户将执行并运行应用程序,并且每个用户必须能够看到传入的回调事件消息。目前,当我尝试打开端口并在应用程序中注册频道时,我使用以下内容:

    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 个答案:

没有答案