ASP.NET non consente richieste simultanee per la stessa sessione; il che significa che un utente può effettuare solo 1 richiesta alla volta.È possibile forzare la richiesta simultanea quando si utilizzano le sessioni ASP.NET?
Per esempio, dire che abbiamo Test1.aspx
:
public partial class Test1 : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
Session["test"] = 1;
System.Threading.Thread.Sleep(int.Parse(Request.QueryString["timeout"]));
}
}
... e Test2.aspx
:
public partial class Test2 : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
Session["test"] = 1;
Label1.Text = DateTime.Now.ToString("dd/MM/yy HH:mm:ss");
}
}
quando visitiamo Test1.aspx?timeout=10000
, e poi subito dopo la visita Page2.aspx
, il 2 ° richiesta dovrà attendere 10 secondi fino al termine della prima richiesta.
Ho appena saputo questo oggi, e ho usato ASP.NET per 5 anni! Non ci credevo fino a quando non l'ho letto in fondo a una pagina MSDN (ASP.NET Session State Overview).
Quindi, c'è un modo per forzare la concorrenza? Cioè, oltre a rendere le pagine più veloci, o lo spostamento di codice in esecuzione lungo a un thread in background. Sono consapevole che puoi rendere la sessione di sola lettura, ma non sono del tutto sicuro che questa sia un'opzione pratica.
wow, ho usato da quando 1.0 e, inoltre, non sapeva che :(E 'stato un problema in nessuna delle app con cui ho lavorato, ma mi chiedo cosa farebbe in un'app che utilizza la sessione per qualcosa e poi procede a inviare un file di download di grandi dimensioni al browser. flashback della sessione di disabilitazione di me in un gestore di file, poiché stavamo progettando di spostare la sessione fuori processo in futuro, mi chiedo quanto sarebbe stato grande il mal di testa per scoprire perché il download bloccava l'app ... – eglasius
Upvote da questo la domanda è stata per un po 'troppo nella mia mente.Molto strettamente correlato: questa restrizione di concorrenza si applica anche alle chiamate al servizio web ASMX dove [WebMethod (EnableSession = true)]? – mikemanne
Nei miei test finora è ancora peggio di quanto descritto da nbolton; anche se Test2 non ha accesso/modifica Session, continuerà a bloccarsi fino al termine di Test1. L'unico modo per aggirare questo problema è impostare in modo esplicito EnableSessionState = "False" come direttiva Page su Test2. – Chris