.NET Remoting - многоканальный регистр на клиенте - PullRequest
2 голосов
/ 29 марта 2012

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

Теперь в приложении мне нужно зарегистрировать другой HttpChannel, который вызывает другой метод на другом сервере.

Но приложение не работает, если я не отменил регистрацию первого канала .

Как сделать так, чтобы оба этих удаленных взаимодействия успешно вызывали удаленные методы?

1 Ответ

2 голосов
/ 29 марта 2012

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

Согласно документации :

  • Каналы регистрируются для каждого домена приложения. Один Процесс может содержать несколько доменов приложений. Когда процесс заканчивается, все зарегистрированные им каналы автоматически уничтожаются.
  • Channel имена должны быть уникальными в домене приложения. Например, потому что каналы по умолчанию имеют имена, чтобы зарегистрировать два HttpChannel объекты в одном домене приложения, вы должны изменить имена каналы, прежде чем регистрировать их. Следующий пример кода C # демонстрирует это.
 IDictionary prop = new Hashtable();
 prop["name"] = "http1";
 prop["port"] = "9001";
 ChannelServices.RegisterChannel(new HttpChannel(prop, null, null)); 
  • Вы не можете зарегистрировать канал, который прослушивает определенный порт. чем один раз. Хотя каналы зарегистрированы на для каждого домена приложения, разные домены приложений на Одна и та же машина не может зарегистрировать один и тот же канал, прослушивая один и тот же порт.
  • Если вы не уверены, доступен ли порт, используйте 0 (ноль) при настройке порта вашего канала и удаленной системы выберет доступный порт для вас.
  • Клиенты могут общаться с удаленный объект с использованием любого зарегистрированного канала. Система дистанционного управления гарантирует, что удаленный объект подключен к правому каналу, когда клиент пытается подключиться к объекту. Клиент несет ответственность для вызова ChannelServices.RegisterChannel перед попыткой общаться с удаленным объектом. Если он ожидает функцию обратного вызова, клиент должен зарегистрировать канал и порт.

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

...