PDA

View Full Version : [ASP.NET] ajax e oggetti "shared"


Gremo
17-06-2007, 01:58
Ciao a tutti.
Ho da poco iniziato a programmare in ASP.NET, utilizzando anche l'estensione AJAX.
Vorrei discutere con voi la possibilità di creare una pagina che gestisca la "concorrenza" e l'aggiornamento in tempo reale di parte di un sito.
Mi spiego meglio, i termini di sopra sono probabilmente inappropriati.

1) l'utente A sta visitando la pagina Lista.aspx. La pagina visualizza un elenco dinamico, mettiamo di prodotti.
2) l'utente B sta aggiungendo un prodotto, mentre A sta visitando la stessa pagina Lista.aspx

Mi rendo conto che in una situazione del genere sia impossible per l'utente A di avere informazioni aggiornate se non facendo il refresh della pagina.

Tuttavia, se A e B avessero in comune un oggetto "shared" (dataset, datatable, oggetto business, qualsiasi cosa) sarebbe fattibile e facile richiamare un DataBind() o analogo per aggiornare (con AJAX) il "pezzetto di pagina" dell'utente A.

Probabilmente non conosco bene (anzi: non conosco) il funzionamento base del framework :muro:
Al momento della richiesta di A, l'oggetto DATASET viene istanziato. Al momento della richiesta di B, DATASET viene istanziato di nuovo (cioè B ha una propria copia dell'oggetto) ??? :confused:
Al limite, facendo in modo che DATASET sia un singleton, sarebbe possible condividere la sua informazione tra A e B.

Spero di essermi spiegato bene e spero che l'oggetto della richiesta vi coinvolga nella discussione. :)

Einstein
17-06-2007, 10:27
Potresti realizzare il tutto utilizzando la cache di ASP.NET, che è "globale" a tutte le sessioni utente.
In pratica, il primo utente che richiede le informazioni le legge dal DB e le mette in cache, gli altri utenti che richiederanno le stesse informazioni le preleveranno dalla cache.
Il tuo metodo di business che restituisce le informazioni, dovrà prima verificare se i dati richiesti sono già in cache.
Ad ogni oggetto della cache puoi assegnare una expiration, che stabilisce per quanto tempo l'oggetto in cache è valido prima che l'engine di ASP.NET lo invalidi.
Maggiori info sulla cache di ASP.NET: http://msdn2.microsoft.com/en-us/library/ms178597.aspx
Se usi SQL Server come base dati puoi usare la SqlCacheDependency, che permette di validare/invalidare gli oggetti in cache a seconda delle modifiche apportate una tabella/record del database. Maggiori info: http://msdn2.microsoft.com/en-us/library/ms178604.aspx
In tutto questo, AJAX renderà più reattiva l'interfaccia, ma il grosso te lo fa già il motore di ASP.NET.

Ciao