Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

The channel 'tcp' is already registered

Tags:

c#

remoting

I want the given application (Windows Service) to act as a remoting server as well as remoting client. In production I will run the two instances of my application monitoring each other over .NET Remoting and will report the failures accordingly.

I have written a basic pieces, and getting "The channel 'tcp' is already registered" exception..I want to set the channel configuration programmatically.

like image 336
Khurram Aziz Avatar asked May 08 '09 12:05

Khurram Aziz


2 Answers

As others have said, if you don't specify the channel name, the code by default uses "tcp" and every channel has to have a unique name: So specify a unique name for each channel you open...

   int tcpPort = 52131;
    // ------------------------------------------------------------
    BinaryServerFormatterSinkProvider serverProv =
        new BinaryServerFormatterSinkProvider();
    serverProv.TypeFilterLevel = TypeFilterLevel.Full; 
    RemotingConfiguration.CustomErrorsMode = CustomErrorsModes.Off;

    serverProv.TypeFilterLevel = TypeFilterLevel.Full;
    IDictionary propBag = new Hashtable();
    // -----------------------------------------
    bool isSecure = [true/false];
    propBag["port"] = tcpPort ;
    propBag["typeFilterLevel"] = TypeFilterLevel.Full;
    propBag["name"] = "UniqueChannelName";  // here enter unique channel name
    if (isSecure)  // if you want remoting comm to be secure and encrypted
    {
        propBag["secure"] = isSecure;
        propBag["impersonate"] = false;  // change to true to do impersonation
    }
    // -----------------------------------------
    tcpChan = new TcpChannel(
        propBag, null, serverProv);
    ChannelServices.RegisterChannel(tcpChan, isSecure);
    // --------------------------------------------

    string uRI = MyUniversalResourceIndicatorName;
    // ---------------------------------------------

    RemotingConfiguration.RegisterWellKnownServiceType(
        typeof(ImportServiceManager), uRI ,
        WellKnownObjectMode.SingleCall);
like image 195
Charles Bretana Avatar answered Oct 21 '22 12:10

Charles Bretana


A channel with a specific port number can only be created by one application instance. You need to use different port numbers and channel names for each instance.

This requires using seperate channel templates (if you are using templates?).

like image 41
stevehipwell Avatar answered Oct 21 '22 12:10

stevehipwell