Qual é a melhor escolha para a comunicação entre processos .NET?

Devo usar o Named Pipes ou o .NET Remoting para me comunicar com um processo em execução na minha máquina?

O WCF é a melhor escolha. Suporta vários mecanismos de transporte diferentes ( incluindo pipes nomeados ) e pode ser completamente orientado à configuração. Eu recomendo que você dê uma olhada no WCF.

Aqui está um blog que faz uma comparação de desempenho do WCF vs Remoting .

Uma citação do blog:

O WCF e .NET Remoting são realmente comparáveis ​​no desempenho. As diferenças são tão pequenas (medir a latência do cliente) que não importa qual é um pouco mais rápido. O WCF tem uma taxa de transferência do servidor muito melhor do que o .NET Remoting. Se eu fosse começar um projeto completamente novo, eu escolheria o WCF. De qualquer forma, o WCF faz muito mais do que Remoting e para todos esses resources eu adoro isso.

Seção MSDN para o WCF

Se estiver em uma única máquina, o Named Pipes oferece melhor desempenho e pode ser implementado com a infraestrutura de remoting e com o WCF. Ou você pode simplesmente usar diretamente System.IO.Pipes .

Se você quer dizer comunicação entre processos, usei o .NET Remoting sem nenhum problema até agora. Se os dois processos estiverem na mesma máquina, a comunicação é bastante rápida.

Os pipes nomeados são definitivamente mais eficientes, mas exigem o design de pelo menos um protocolo de aplicativo básico, o que pode não ser viável. A comunicação remota permite que você invoque methods remotos com facilidade.

Remoting no .NET Framework 2.0 fornece o canal IPC para comunicação entre processos dentro da mesma máquina.

Se você estiver usando o .NET Framework 3.0 ou superior, usaria o WCF. Usando o WCF, você pode usar diferentes ligações dependendo do compromisso entre performance / interop / etc. isto que você precisa.

Se o desempenho não for crítico e você precisar interagir com outras tecnologias de serviço da Web, convém usar a binding WS-HTTP. Para o seu caso, você pode usar o WCF com uma binding net-tcp ou uma binding de pipe nomeado. Ou deveria funcionar.

Minha opinião pessoal é que a abordagem do WCF é mais limpa, como você pode fazer serviços controlados por contrato e foco em mensagens, não em objects (estou fazendo uma generalização aqui com base nos modelos de programação padrão do WCF / .NET Remoting). Eu não gosto de enviar objects através do fio porque muitas informações semânticas são perdidas ou não estão claras. Quando tudo o que você está fazendo é enviar uma mensagem como se estivesse com o WCF, fica mais fácil separar suas preocupações entre a comunicação e as classs / infra-estrutura das quais um único nó é composto.

.Net remoting não é um protocolo em si. Ele permite escolher qual protocal usar: SOAP, pipes nomeados, etc.

O WCF também oferece flexibilidade. Mudando apenas algumas configurações (binding), você pode ter o mesmo serviço em alguma outra máquina em vez de IPC na mesma máquina. Portanto, seu código permanece flexível.

O .net remoting é incorporado ao .net para fazer a comunicação interna do processo. Se você usar isso, eles continuarão a suportar e possivelmente aprimorá-lo em versões futuras. Canais nomeados não oferecem a promise de melhorias em versões futuras do .net