Sto progettando un servizio WCF a cui tutti i miei clienti si collegheranno. Uno di questi servizi sarà un servizio di notifiche.Duplex WCF: invia notifiche diverse a ciascun client?
Vorrei che ogni client si connettesse al servizio, lo sottoscrivesse e quindi ricevesse le notifiche, utilizzando un'interfaccia di richiamata duplex (il servizio attiva l'operazione "Notifica" nei client).
Questa è la mia idea di design:
La mia domanda è: Quando ogni client si collega al mio servizio, mi convalidarlo contro il tavolo 'Users' nel mio database (userò un UserNamePasswordValidator e implementa la funzione 'Convalida').
Requisito: ogni utente deve ricevere notifiche diverse, in base alle regole definite nel database, ma tutte utilizzano lo stesso contratto.
Ad esempio:
John Smith s' regole nel DB potrebbe essere: Comunica su tutti i nuovi prodotti che hanno un prezzo di oltre 100 dollari.
Le regole di Jane Doe nel DB potrebbero essere: Avvisami su tutti i nuovi prodotti che i loro nomi iniziano con 'JA'.
Le regole di Jim Jabra nel DB possono essere: Avvisami su tutti i nuovi prodotti di tipo "Cibo".
Il mio servizio avrà un thread di lavoro che rileva una modifica nel database (un nuovo prodotto è stato inserito nel database).
Dovrebbe quindi eseguire il loop su tutti i client connessi e, per ciascun client, inviare una notifica del nuovo prodotto, solo se corrisponde alle richieste di notifica del client.
Ancora: tutti i client ricevono lo stesso tipo di aggiornamento (nuovi prodotti), ma ogni cliente deve ricevere prodotti diversi in base alla regola nel database.
Un approccio che ho pensato di implementare questa potrebbe essere quella di utilizzare un servizio di Singleton, che contiene un elenco di:
- client Enpoint
- oggetto utente (dal database)
In questo modo, ogni volta che il thread di lavoro rileva un nuovo prodotto, scorre su questo elenco e invia notifiche a chi ne ha mai bisogno. Il problema con questo approccio è che per avere un elenco globale di clienti - ho bisogno di avere il servizio come Singlton, giusto?
Il secondo approccio sarebbe ... beh ... Non ho un'altra idea di come posso accedere a un elenco di client connessi al servizio da un thread di lavoro ...
Credo che il il problema principale che ho è che ogni cliente potrebbe desiderare che generi diversi di prodotto gli vengano notificati.Significato: il metodo pub \ sub non è molto buono qui, perché il mio scenario richiede che il servizio conosca i clienti.
Qualche suggerimento su come posso risolvere questo mal di testa?
Hai mai pensato di usare una coda. Dove ognuno dei tuoi client si connette alla coda e esegue il polling dei dati non appena disponibili. E semplice che il servizio WCF sia un servizio per la sottoscrizione dei dati. Quindi, nel thread di lavoro, invia i dati alla coda del client quando i dati appartengono a loro. – rpgmaker
come farebbe una coda per risolvere esattamente il mio problema? cosa intendi con "il servizio wcf sarà un servizio per la sottoscrizione dei dati"? hai un campione o un esempio che posso guardare? –
La mia risposta è inferiore a – rpgmaker