Mecanismos IPC em C# – Uso e Melhores Práticas
Pergunta
Eu usei IPC no código win32 há algum tempo.[Seções críticas, eventos e semáforos]
Como é o cenário no ambiente .NET?Existe algum tutorial explicando todas as opções disponíveis e quando usar e por quê?
Solução
O material mais recente da Microsoft no IPC é Fundação de comunicação do Windows.Na verdade, não há nada de novo no nível inferior (tcp, upd, pipes nomeados, etc.). Mas o WCF simplifica muito o desenvolvimento do IPC.
Recurso útil:
- Comunicação entre processos com WCF no Dr.Portal do Dobb
- Opções de comunicação do WCF no .NET Framework 3.5
e claro MSDN no WCF
Outras dicas
Além do óbvio (WCF), existe uma ligação ZeroMQ para C#/CLR que é muito boa:
http://www.zeromq.org/bindings:clr
Faz IPC orientado a mensagens, pub/sub e várias outras estratégias com muito menos código e configuração que o WCF.
Também é pelo menos uma ordem de magnitude mais rápida do que qualquer outra coisa e tem menos latência se você precisar de comunicações de baixa latência.
Com relação a semáforos, bloqueios, mutexes etc.Se você compartilhar comunicando-se em vez de comunicar-se compartilhando, terá muito menos problemas do que o paradigma tradicional.
Costumo usar pipes nomeados ou soquetes Unix (dependendo se estou visando MS.NET ou Mono - tenho uma classe que abstrai isso), pois é fácil de usar, portátil e me permite interoperar facilmente com código não gerenciado .Dito isto, se você estiver lidando apenas com código gerenciado, use WCF ou comunicação remota - o último se precisar de suporte Mono, já que o suporte WCF simplesmente ainda não existe.
Eu recomendaria usar arquivos mapeados na memória se você precisar usar no domínio da máquina e não na comunicação pela rede.Veja o link a seguir.
http://techmikael.blogspot.com/2010/02/blazing-fast-ipc-in-net-4-wcf-vs.html
Há também o .NET Remoting, que achei muito legal, mas acho que eles estão tornando-o obsoleto agora que têm o WCF.
Parece que você está interessado em técnicas de sincronização e não em comunicação.Se sim, você pode querer começar aqui, ou talvez isso mais visão geral concisa.