Domanda

Diciamo che ho un elenco di soggetti (ad esempio, un elenco di elementi TODO) che più di un utente può cambiare, cancellare da e aggiungere al allo stesso tempo.

Quindi, per maintane sincronizzato elencato tra tutti i clienti, voglio ogni cliente (in base AJAX) per chiedere cambiamenti ogni XX secondi. Dal momento che l'elenco può ottenere mooolto lunga, non voglio fare una richiesta completa di volta in volta, ma chiedo solo per gli elementi modificati (articoli possono essere aggiornati, cancellati o nuovo).

E 'possibile con ADO.NET Data Services? Se sì, come faccio a implementare, se io uso Entity Framework sul server?

Ho pensato di utilizzare la cache ASP.NETs per memorizzare gli elementi di cambiamento in cui un'operazione di cambiamento è presentata al servizio dati, e avere un metodo web personalizzata che restituirebbe le ultime modifiche in quanto il client specifici ultima richiesta (richieste potrebbero essere monitorati attraverso i client ASP.NETs oggetto di sessione). Tuttavia, non ho idea di come per indicare lo stato cambiamento del singolo elemento (ad esempio, eliminato o aggiornato o inserito) nel set di risultati.

Una grande soluzione sarebbe anche rendere possibile per il cliente di chiedere cambiamenti in molte entità nella stessa andata e ritorno al server.

Ogni ingresso sarà molto appreaciated.

Con i migliori saluti, Egil.

È stato utile?

Soluzione

Il modo che viene in mente è quello di utilizzare un numero di generazione per la tabella. Dare il tavolo TODO una colonna chiamata generazione e (mentalmente) associato con un numero variabile di generazione globale e persistente. (Probabilmente è meglio mettere questo in una tabella nel DB).

Ogni volta che un aggiornamento o inserto è realizzato il numero di generazione viene incrementato e introdurla nella colonna numero di generazione del record aggiornato o inserito.

Quando i record vengono prima letti dal DB e messo sulla pagina web il numero attuale generazione è anche recuperato e memorizzati nella cache locale (vale a dire mettere in una variabile JavaScript). Successivamente AJAX guidato legge utilizzare una clausola WHERE che filtrano solo i record con un numero di generazione superiore al numero di generazione nella cache locale. In questo modo solo i nuovi aggiornamenti e le eliminazioni vengono recuperati. Il numero di generazione memorizzato nella cache locale viene aggiornato.

Elimina sono un po 'più complicato. Un modo per farlo è quello di tombstone cancellato record per un periodo limitato, diciamo 21 minuti. Hai colonna di bit chiamato lapide e una colonna datetime. Quando un record viene eliminato la colonna ha il numero di generazione impostato allo stesso modo che per un inserimento o eliminare, viene impostato il bit lapide, e il datetime è impostato l'ora corrente utilizzando GetDate (). richiesta AJAX del client può quindi selezionare i record con il flag impostato lapide e rimuoverli dalla lista lato client. Se il client è codificato in modo che dopo ogni 20 minuti un aggiornamento della pagina completa, o una chiamata AJAX che ottiene ogni record viene applicata poi un lavoro DB può essere eseguito ogni minuto e ripulire (vale a dire eliminare) i record eliminati definitivamente più di 20 minuti.

EDIT:. In realtà non è necessario persistere a parte il numero di generazione, è possibile la funzione SQL MAX sopra la colonna generazione

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top