Barra di stato Progettazione di timetracking

4

Attualmente sto sviluppando un'applicazione in ASP.NET usando SQL come database di back-end. Nella mia intestazione, ho una barra di stato che mostra lo stato corrente dell'utente e un timer che mostra per quanto tempo sono stati etichettati come tale stato.

Utilizzare un pannello di aggiornamento con un timer per aggiornare i dati direttamente dal database (effettuando così 1 query / aggiornamento ogni secondo) non sembra il modo migliore per farlo. Suppongo che tu voglia interrogare "l'ora di inizio" dell'utente per il loro stato e usare un timer javascript per tenere traccia da lì, ma il mio problema è questo; come integrare questo metodo assicurandomi allo stesso tempo che lo stato stesso venga aggiornato quando viene modificato nel database?

    
posta Rein S 08.06.2015 - 15:54
fonte

1 risposta

1

SQL Server ha una funzione chiamata notifica di query . L'applicazione invia una query e alcuni parametri. Questo è noto come abbonamento. Se i dati cambiano in modo che il risultato di questa query sia diverso con i nuovi dati, la notifica viene attivata.

Da BoL :

Query notification subscriptions must be created from a database access interface. Transact-SQL does not provide a mechanism for creating query notification subscriptions.

Questo link ha diverse opzioni per la creazione di una notifica. Esistono restrizioni su come potrebbe apparire la query.

Le notifiche delle query vengono elaborate tramite Service Broker (SB), pertanto è necessario configurarle sull'istanza. Quando la notifica viene attivata, viene inserito un messaggio nella coda specificata. Queste code non sono diverse dalle altre code di SB, quindi vengono applicate tutte le regole di ACID e di autorizzazione.

L'applicazione ascolta questa coda e reagisce quando arriva il messaggio. L'applicazione può eseguire il polling o fare in modo che un thread sia bloccato, in attesa di un messaggio. Quando viene inviata la notifica, l'abbonamento viene eliminato. La domanda deve presentare un nuovo abbonamento per ricevere ulteriori notifiche. Ciò potrebbe causare condizioni di gara o consentire la modifica dei dati intermedi.

Fai attenzione, se hai molti client attivi e cambi frequentemente i dati poiché può aggiungere un carico significativo al server.

    
risposta data 09.06.2015 - 04:44
fonte

Leggi altre domande sui tag