Канал 'tcp' уже зарегистрирован - PullRequest
9 голосов
/ 08 мая 2009

Я хочу, чтобы данное приложение (служба Windows) действовало как удаленный сервер, а также как удаленный клиент. В процессе работы я буду запускать два экземпляра моего приложения, контролирующего друг друга через .NET Remoting, и сообщать об ошибках соответственно.

Я написал базовые фрагменты и получаю исключение "Канал 'tcp' уже зарегистрирован". Я хочу установить конфигурацию канала программно.

Ответы [ 3 ]

12 голосов
/ 08 мая 2009

Как уже говорили другие, если вы не укажете название канала, код по умолчанию использует "tcp", и у каждого канала должно быть уникальное имя: поэтому укажите уникальное имя для каждого канала, который вы открываете ...

   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);
7 голосов
/ 08 мая 2009

Канал с определенным номером порта может быть создан только одним экземпляром приложения. Вам необходимо использовать разные номера портов и названия каналов для каждого экземпляра.

Для этого необходимо использовать отдельные шаблоны каналов (если вы используете шаблоны?).

2 голосов
/ 08 мая 2009

Вы можете создавать один и тот же канал с одинаковым номером порта только один раз для AppDomain. Это то, что не так?

...