2009-07-23 16 views
23

Esiste un modo per specificare che una determinata azione Controller o utilizza lo stato di sessione in modo di sola lettura? Nella "vecchia" ASP.NET abbiamo usato per fare qualcosa di simile:Specificando sola lettura sessione in ASP.NET MVC

<%@ Page EnableSessionState="ReadOnly" %> 

Esiste un equivalente ASP.NET MVC? Sto cercando di consentire alla mia applicazione di servire più richieste dallo stesso client contemporaneamente, e disattivare completamente la sessione è -non-un'opzione nel mio caso.

+0

possibile duplicato del [Disattiva stato sessione per-richiesta in ASP.Net MVC] (http://stackoverflow.com/questions/1464203/disable-session-state-per-request-in-asp -net-mvc) – Liam

risposta

8

Una domanda simile è stato chiesto qui: Disable Session state per-request in ASP.Net MVC

Le offerte risposta accettata con la creazione di un gestore percorso personalizzato che alla fine salta vincolante alla sessione. Questo non risponde esattamente alla tua domanda (che è come dichiarare più azioni per utilizzare l'accesso alla sessione in sola lettura), ma sembrava abbastanza rilevante da menzionare.

1

questo potrebbe essere un po 'complicato - la mia comprensione sta allestendo lo stato di sessione è qualcosa che è accaduto a livello IHttpHandler. Con i gestori personalizzati, è possibile specificare lo stato della sessione utilizzando le interfacce marcatore, ad esempio IReadOnlySessionState, per dichiarare che è necessario solo lo stato della sessione in sola lettura. Potresti provare ad aggiungerlo al tuo controller e vedere come vola. Sospetto che non lo farà perché i controller mvc ASP.NET si verificano molto bene dopo che IH HTTPHandler è stato collegato, ma vale la pena provare.

Un'altra soluzione potrebbe essere quella di avvolgere le variabili di stato di sessione nella propria classe, ed esporre una versione di sola lettura per far rispettare sola lettura. L'accesso a più richieste non dovrebbe essere un problema, ma è corretto che tu possa ottenere condizioni di gara e simili se inizi a provare a scrivere sulle stesse variabili di sessione da più angolazioni.

+0

L'obiettivo non è rendere le variabili di sola lettura, l'obiettivo è consentire più richieste simultanee alle pagine MVC da un singolo client. L'avvolgimento delle variabili di sessione in un wrapper di sola lettura non lo aiuterà. – Mark

+0

Immagino che non ti stia seguendo esattamente - perché ReadOnly importa se non per evitare le condizioni di gara quando potrebbero esserci aggiornamenti simultanei? Se tutte le tue pagine stanno solo leggendo i dati della sessione, avere delle richieste simultanee non farà male. Se tutte le tue pagine hanno bisogno di aggiornare la sessione simultaneamente, quindi il wrapping di ReadOnly non ti aiuterà. –

+1

La sola lettura è importante perché il runtime di ASP.NET non consente più richieste dallo stesso client, a meno che non venga specificata una sessione di sola lettura. Non posso avere richieste simultanee a meno che non specifichiamo la sessione di sola lettura e la domanda chiede come farlo in ASP.NET MVC. – Mark

-2

Cosa sull'impostazione i dati che si desidera essere "sola lettura", come statica nel vostro modello? In questo modo potresti avere richieste simultanee a MVC con gli stessi dati.

+2

I problemi di threading non sono quelli che sto cercando di risolvere qui, il problema è che ASP.NET non permetterà a un'applicazione web di gestire più richieste dallo stesso client contemporaneamente a meno che non pensi che sia stato disattivato lo stato di entrambe le sessioni o che il gestore specifico che elabora le richieste non modificherà lo stato della sessione. La creazione di campi nel modello statico non notificherà a ASP.NET che lo stato della sessione è di sola lettura. – Mark