2010-03-16 9 views
5

Ho bisogno di implementare una qualche forma di meccanismo di comunicazione nella mia applicazione, per inviare notifiche/messaggi da un'istanza dell'applicazione a tutti gli altri. Questo è uno scenario normale in cui qualcuno aggiunge, elemento o elimina e elemento e si desidera informare gli altri utenti che ciò è accaduto.Messaggistica nella rete locale con .NET

L'applicazione viene eseguita sul client e si connette a un database sulla rete locale. Quindi non è come se tutti i client accedessero a un'istanza del server dell'applicazione. Quindi, da quanto so, potrei usare MessageQueues o qualche forma di polling del database dove ho una tabella che memorizza tutti i messaggi (non ideale).

Il problema è che è necessario implementarlo molto rapidamente, quindi purtroppo non può diventare molto complesso, ma è necessario la soluzione più semplice e rapida.

grazie per l'aiuto!

risposta

2

Sembra che potrebbe essere più semplice utilizzare la concorrenza ottimistica. Supponiamo che le cose non vengano cancellate e trattate nel client interessato quando succede, il che dovrebbe essere più semplice dello sviluppo di qualche tipo di sistema di notifica concorrente che non scalerà affatto ...

Oltre a questo, se si la lista dei client è piccola, il polling db è il modo più semplice per farlo senza aggiungere un altro livello di comunicazione al tuo sistema, basta aggiungere una tabella e implementare una libreria di classi alla quale ognuno può fare la propria cosa, se puoi accedere al DB puoi per scoprire articoli cancellati ecc.

+0

Sì, stavo pensando alla concorrenza Optimistic, ma non è un'opzione per me in quanto ho bisogno di notificare gli utenti quando un nuovo oggetto è inserito (entro un paio di secondi di questo evento). L'aggiunta di un intero livello di messaggistica non è l'ideale, ma consentirebbe a me di utilizzarlo estesamente nel sistema. Il problema è nella mia app di test. Sto ricevendo MSMQ - Problemi con il dominio ... quindi pensa che il polling avverrà a meno che non ci siano altre opzioni. – Richard

+0

MSMQ è un cane. Il modo "giusto" per farlo è probabilmente qualcosa di simile a un sistema di pubblicazione/sottoscrizione, che potresti eseguire da solo o trovare alcune librerie. So che SQL Server Service Broker ha alcune funzionalità di notifica multipla che potrebbero adattarsi ai tuoi scopi (è una coda di messaggi in SQL, progettata per i proc memorizzati per notificare ad altre entità che qualcosa è cambiato). – Spence

+0

Bene, MSMQ e tutte le altre opzioni avrebbero impiegato troppo tempo, quindi l'hanno già implementato usando il polling. Ho appena creato una tabella, la scrivo ogni N secondi e poi se c'è un messaggio per questo utente, lo leggo e lo elabora, quindi rimuovo questo messaggio. E ovunque sia necessario, basta creare un messaggio nella tabella per ogni utente. Quando l'utente si collega, assicurati di cancellare tutti i messaggi in modo che non ottenga 100 messaggi quando accede. È tutto molto semplice, ma funziona proprio come ho bisogno nel nostro piccolo sistema. Grazie. – Richard

0

Potrebbe essere utile controllare il mio post sul blog here, che illustra una possibile implementazione di un aggregatore di eventi tra processi.

0

Credo che si possa fare questo con WCF. Ha un vincolo per le comunicazioni peer-to-peer.

0

Penso polling il db sta per essere il vostro percorso più veloce. Qualcosa di veramente semplice come, quando un tavolo ha una modifica fatta, memorizza l'ora in cui è successo in un altro tavolo, usare un trigger è un modo per farlo.

I client eseguono query su tale tabella e confrontano l'ora modificata a livello locale, se l'ora del database è più recente, quindi aggiorna.

Qualsiasi cosa di più sarebbe complicata ..... specialmente con il requisito del "paio di secondi".

È possibile implementare tutto questo in un modo che potrebbe essere sostituito con il metodo più pesante in seguito, se necessario.

+0

Sì, questa è la strada che ho preso. Come dici tu, purché sia ​​fatto in un modo che gli consenta di estenderlo ok. Ma per ora non posso prevedere che debba essere qualcosa di più complesso. – Richard

0

A seconda della topologia della rete, la scelta naturale sarebbe quella di trasmettere una (stessa sottorete) o multicast su più sottoreti quando viene aggiunto qualcosa di nuovo.
Le trasmissioni sono piuttosto semplici da programmare, ma è necessario controllare prima se sono permesse nella rete.

0

È necessario innanzitutto studiare la programmazione socket in C# aprire questi collegamenti: http://www.codeproject.com/Articles/10649/An-Introduction-to-Socket-Programming-in-NET-using

http://socketprogramming.blogspot.com/

successivo se u r a C# sviluppatore sarà facile farlo.

+0

Nota che [risposte solo per collegamento] (http://meta.stackoverflow.com/tags/link-only-answers/info) sono scoraggiate, pertanto le risposte dovrebbero essere il punto finale di una ricerca di una soluzione (vs. ancora un altro scalo di riferimenti, che tendono a diventare stantii nel tempo). Si prega di considerare l'aggiunta di una sinossi autonoma qui, mantenendo il collegamento come riferimento. –

Problemi correlati