Scusate la domanda, e' possibile mettere un DataSet in un Cookie?
so che e' possibile con ViewState(ma non mi regge nelle altre pagine) e Session( ma ho il divieto di usarle).
Qualcuno sa come fare?
Grazie!
Scusate la domanda, e' possibile mettere un DataSet in un Cookie?
so che e' possibile con ViewState(ma non mi regge nelle altre pagine) e Session( ma ho il divieto di usarle).
Qualcuno sa come fare?
Grazie!
We live thinking we will never die.
We die thinking we had never lived.
Sì è possibile, ma è fortemente sconsigliato.
- i cookies non sono nati per la persistenza di dati
- hanno un limite di 4Kb che con un DataSet raggiungeresti molto presto
- fondamentalmente è un errore portare dati applicativi (da non mostrare) sul client
E' vero che possibile con il ViewState, ma anche lì non sarebbe molto corretto persistere il DataSet e può portare a problemi sempre nel caso di dati superiori ai 4Kb.
Il modo più corretto è gestire in Session o, se non puoi, gestire out-of-proc sempre con Session configurata appositamente o con un tuo meccanismo (ad esempio persisti su file system o su db)
Purtroppo il mio compito e' proprio quello di riconvertire le Session esistenti in qualcosa che non sia Session (il sito andra' su tre server diversi quindi le Session potrebbero non funzionare).
Sai per caso un modo come salvarmi il DataSet per le pagine successive?
Si tratta di fare la versione stampabile di un Datalist (generato dinamicamente).
Ho provato anche salvando il dataset in Cache, ma con scarsi risultati (es se provo per a "sortare" la lista nella versione stampabile ho sempre i risultati della prima pagina non sortata).
We live thinking we will never die.
We die thinking we had never lived.
Ciao perchè non metti i tuoi dataset in file xml?
Oppure già che stiamo parlando di persistenza dati.. perchè non provi nHibernate?
Il modo più corretto di gestire una Session in ambiente multi-server è gestirla out-of-proc, tramite i meccanismi che già ti offre il framework e abilitabili da web.config (State Server, Sql Server) oppure con un meccanismo di persistenza custom. Sicuramente c'è una crescita di overhead e le performance decadono rispetto alla gestione in-proc.
Una soluzione che a volte ho adottato è persistere nel ViewState, facendo attenzione che nel caso di criptazione gli attributi machineKey nel machine.config di tutti i server devono coincidere e che potrebbero esserci proxy/firewall che tagliano il ViewState se > 5Kb. Qui appesantisci il client e il traffico di rete aumenta, ma se sei in ambiente intranet e sai che il problema del "taglio" non accadrà è probabilmente la soluzione più scalabile evitando la Session.
NHibernate ha un impatto molto forte in fase di progettazione e non può essere inserito facilmente in fase successiva; oltretutto non è un layer che si occupa di persistenza: c'è NPersist per questo, ma non risolverebbe il suo problema di _dove_ persistere.
Quindi tu pensi che basta lasciare le Sessions al loro posto e impostare nel web.config <sessionstate mode="SQLServer" ... ?
Devo creare una tabella particolare in questo modo o fa tutto da solo?
Poi, scusa l'ignoranza, cosa sono NPersist e NHibernate?
Grazie ancora!
We live thinking we will never die.
We die thinking we had never lived.
Ovviamente sostituisci l'indirizzo IP con quello della macchine dove verranno gestite le sessioni. In questa macchina deve essere attivo il servizio "asp.net state service".codice:<sessionState mode="StateServer" stateConnectionString="tcpip=127.0.0.1:42424"/>
Hey hey, my my Rock and roll can never die!
Per gestirla su SQL Server ti basta lanciare sul DB server lo script InstallPersistSqlState.sql che trovi nella directory del framework e che provvederà a crearti tutte le tabelle necessarie. A questo punto tutti i web.config devono puntare a quel server.
Stesso discorso se vuoi gestirlo tramite StateServer, ma anzichè creare tabelle dovrai abilitare il servizio Windows sul server che manterrà le sessioni (sarà uno solo e tutti punteranno a quello).
In entrambi questi casi il tuo codice non cambia di una virgola: valorizzi e recuperi sempre utilizzando l'oggetto Session, attenzione però che ora tutto quello potrai mettere in Session dovrà essere serializzabile (la classe deve essere marcata Serializable).
NPersist e NHibernate sono progetti open source che si occupano di ORM (Object Relational Mapping) e persistenza, sono validi progetti, ma non credo che ti possano essere utili in questo caso.
Ecco un paio di link dalla KB:
"INFO: Cenni preliminari sulla gestione dello stato ASP.NET"
http://support.microsoft.com/?scid=k...07598&x=10&y=9
"COME A Configura ASP.NET per gestire stato sessione permanente di SQL Server"
http://support.microsoft.com/?scid=k...1209&x=20&y=16