Como serviços de “ligar” para canais específicos (tcp, http, ipc) em um servidor Remoting?
Pergunta
Eu tenho um aplicativo de servidor Remoting complexo que fornece um par de serviços. Os clientes podem actualmente usar tcp e canais de http para se conectar ao servidor.
Agora eu preciso para implementar alguns novos serviços de administração, mas eu quero restringir a sua disponibilidade para a máquina local, ou seja, eu quero criar uma ferramenta de administração que pode usar estes novos serviços, mas eu não quero que os dados sensíveis fisicamente licença o servidor, então eu preciso para restringir a execução da ferramenta de administração no mesmo computador servidor.
Eu pensei sobre a adição de novos serviços e também registrar o canal ipc com o servidor para uso da ferramenta de administração. Agora vem o problema: como posso impedir que os clientes remotos que ligam a estes novos serviços de administração usando o protocolo TCP ou http canal? Posso dizer algo como "registo de serviços x, implementado pela classe C na montagem A, utilizável apenas via ipc", "register serviço y, implementado pela classe D em conjunto A, utilizável via TCP / http" em app.config (ou usando comunicação remota aulas de infra-estrutura)?
É o "utilizável apenas via ipc" parte que confunde-me. (E não, portar para WCF não é uma opção agora.)
Solução
Não há sobrecargas para RegisterWellKnownServiceType que permitem que você especifique qual o canal se registrar no, nem existem quaisquer métodos no IpcServerChannel para registrar um serviço, de modo que nada disso vai funcionar.
O melhor que posso pensar é escrever um ChannelSink que filtra as mensagens ou fornece segurança. Estes podem ser adicionados para o construtor do seu TcpChannel e HttpChannel para filtrar admin somente chamadas.
Outras dicas
Obter o endereço IP do serviço de chamá-lo. Se é algo que não seja 127.0.0.1 rejeitar a chamada.