Как «привязать» сервисы к определенным каналам (tcp, http, ipc) на сервере .NET Remoting? - PullRequest
3 голосов
/ 24 октября 2008

У меня есть сложное приложение сервера .NET Remoting, которое предоставляет несколько сервисов. В настоящее время клиенты могут использовать каналы tcp и http для подключения к серверу.

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

Я думал о добавлении новых сервисов, а также о регистрации канала ipc на сервере для использования инструментом администратора. Теперь возникает проблема: как я могу предотвратить подключение удаленных клиентов к этим новым службам администратора по каналу tcp или http? Могу ли я сказать что-то вроде «зарегистрировать службу x, реализованную классом C в сборке A, используемую только через ipc», «зарегистрировать службу y, реализованную классом D в сборке A, используемую через tcp / http» в app.config (или удаленная инфраструктура классов)?

Это часть, которую можно использовать только через ipc, сбивает меня с толку. (И нет, портирование на WCF сейчас не вариант.)

Ответы [ 2 ]

3 голосов
/ 24 октября 2008

Нет никаких перегрузок для RegisterWellKnownServiceType, которые позволяют вам указать, на каком канале регистрироваться, и нет никаких методов в IPCServerChannel для регистрации службы, поэтому ни один из них не будет работать.

Лучшее, что я могу придумать, это написать ChannelSink, который фильтрует ваши сообщения или обеспечивает безопасность. Их можно добавить в конструктор вашего TcpChannel и HttpChannel, чтобы отфильтровать только вызовы администратора.

1 голос
/ 24 октября 2008

Получить IP-адрес службы, вызывающей его. Если это что-то отличное от 127.0.0.1, отклоните вызов.

...