Domanda

Come sapete, in ASP.NET, è possibile memorizzare i dati della sessione in una delle seguenti tre modalità:

  • InProc
  • Stato sessione
  • SQL Server

Per la modalità InProc, è possibile memorizzare qualsiasi tipo di oggetto dati anche se non è serializzabile. Tuttavia, nelle modalità Stato sessione e SQL Server, è possibile archiviare solo dati serializzati.

Nel mio progetto, ho un portale già pronto che usa " InProc " modalità per memorizzare la sua sessione. Devo invece utilizzare lo stato della sessione a causa di alcuni problemi di scalabilità e gestione degli errori.

Il problema che questo portale sta memorizzando internamente oggetti non serializzati nel contesto della sessione (ovvero gli oggetti memorizzati non implementano l'interfaccia ISerializable). Non ho accesso al loro codice. C'è qualche soluzione in modo che io possa essere in grado di memorizzare gli oggetti della sessione in State Server senza modificare il loro codice. Ho ancora accesso al loro file web.config se questo potrebbe aiutare in qualsiasi tipo.

È stato utile?

Soluzione

AFAIK, la risposta semplice è no. Se non ti dispiace cambiare il tuo codice, potresti iniettare un oggetto wrapper tra l'oggetto reale e il tuo e far sì che il tuo wrapper gestisca la serializzazione dell'oggetto avvolto (essenzialmente come surrogato della serializzazione) - ma a quel punto sarebbe quasi più facile riscrivi semplicemente il codice ...

Che tipo di oggetti sono? In genere, gli oggetti per lo stato della sessione sarebbero semplici classi di dati, quindi non dovrebbero esserci troppi problemi durante la serializzazione?

Altri suggerimenti

La serializzazione crea una rappresentazione dell'oggetto che può essere memorizzata e letta per ricreare lo stato dell'oggetto.

Se un oggetto contiene solo tipi di valore, potrebbe non essere necessario implementare ISerializable, ma solo l'attributo [Serializable].

Per rendere questa risposta più utile o diretta alla domanda in corso:

Non è possibile serializzare un oggetto che non è stato eliminato in qualche modo come serializzabile. Qualsiasi altro modo generico di ricreare un oggetto potrebbe far sì che l'oggetto non abbia lo stesso stato di prima che fosse "serializzato".

Come accennato da Marc, potresti farlo creando il tuo 'wrapper' serializzabile, ma dovresti essere molto familiare con l'oggetto in questione e l'oggetto dovrebbe avere metodi che gli consentano di essere ri -creato in questo modo.

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