Meccanismi IPC in C#: utilizzo e procedure consigliate
Domanda
Ho usato IPC nel codice Win32 qualche tempo fa.[Sezioni critiche, eventi e semafori]
Com'è la scena nell'ambiente .NET?Esistono tutorial che spiegano tutte le opzioni disponibili, quando utilizzarle e perché?
Soluzione
Il materiale più recente di Microsoft in IPC è Fondazione per la comunicazione di Windows.In realtà non c'è nulla di nuovo nel livello inferiore (tcp, upd, pipe denominate ecc.) Ma WCF semplifica notevolmente lo sviluppo IPC.
Risorsa utile:
- Comunicazione tra processi con WCF sul Dott.Il portale di Dobb
- Opzioni di comunicazione WCF in .NET Framework 3,5
e naturalmente MSDN su WCF
Altri suggerimenti
A parte l'ovvio (WCF), esiste un collegamento ZeroMQ per C#/CLR che è piuttosto buono:
http://www.zeromq.org/bindings:clr
Esegue IPC orientato ai messaggi, pub/sub e varie altre strategie con molto meno codice e configurazione rispetto a WCF.
È anche almeno un ordine di grandezza più veloce di qualsiasi altra cosa e ha meno latenza se hai bisogno di comunicazioni a bassa latenza.
Per quanto riguarda semafori, lock, mutex ecc.Se condividi comunicando anziché comunicare condividendo, avrai molti meno problemi rispetto al paradigma tradizionale.
Tendo a utilizzare pipe denominate o socket Unix (a seconda che mi rivolga a MS.NET o Mono: ho una classe che lo astrae) poiché è facile da usare, portatile e mi consente di interagire facilmente con codice non gestito .Detto questo, se hai a che fare solo con codice gestito, scegli WCF o servizi remoti: quest'ultimo se hai bisogno del supporto Mono, poiché il loro supporto WCF semplicemente non è ancora disponibile.
Consiglierei di utilizzare Memory Mapped Files se è necessario utilizzare il dominio della macchina senza comunicare tramite la rete.Vedi il seguente collegamento.
http://techmikael.blogspot.com/2010/02/blazing-fast-ipc-in-net-4-wcf-vs.html
C'è anche .NET Remoting, che ho trovato piuttosto interessante, ma immagino che lo stiano rendendo obsoleto ora che hanno WCF.
Sembra che tu sia interessato alle tecniche di sincronizzazione piuttosto che alla comunicazione.Se è così, potresti iniziare Qui, o forse questo di più panoramica sintetica.