Program ASP.NET nie zezwala na współbieżne żądania dla tej samej sesji; co oznacza, że użytkownik może wykonać tylko jedno żądanie naraz.Czy można wymuszać współbieżność żądań podczas korzystania z sesji ASP.NET?
Załóżmy, że mamy 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"]));
}
}
... i 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");
}
}
Kiedy odwiedzamy Test1.aspx?timeout=10000
, a następnie natychmiast po wizycie Page2.aspx
, 2. wniosek będzie musiał odczekaj 10 sekund, aż zakończy się pierwsze żądanie.
Właśnie się tego nauczyłem dzisiaj i używam ASP.NET przez 5 lat! Naprawdę nie wierzyłem, dopóki nie przeczytałem go na dole strony MSDN (ASP.NET Session State Overview).
Czy istnieje sposób na wymuszenie współbieżności? Innymi słowy, niż tworzenie stron szybszych lub przenoszenie długiego kodu do wątku w tle. Jestem świadomy, że możesz ustawić sesję tylko do odczytu, ale nie jestem do końca pewien, czy jest to opcja praktyczna.
wow, używam go od 1,0, a także nie wiedział, że :(Minęło Nie mam problemu z żadną aplikacją, z którą pracowałem, ale zastanawiam się, co by to zrobiło w aplikacji, która używa sesji dla czegoś, a następnie kontynuuje wysyłanie dużego pliku do pobrania do przeglądarki. flashować mnie wyłączającą sesję w procedurze obsługi plików, ponieważ planowaliśmy przenieść proces wyłączania sesji w przyszłości, zastanawiam się, jak duży byłby ból głowy, aby dowiedzieć się, dlaczego pobieranie zablokowało aplikację ... – eglasius
Odtworzyć, ponieważ pytanie również było w mojej głowie.Bardzo ściśle powiązane: czy to ograniczenie współbieżności dotyczy również wywołań usługi sieciowej ASMX, w których [WebMethod (EnableSession = true)]? – mikemanne
W moich testach do tej pory jest jeszcze gorszy niż opisuje Nbolton; nawet jeśli Test2 nie uzyskał dostępu/zmiany sesji, blokowałby się do zakończenia Test1. Jedynym sposobem obejścia tego problemu jest jawne ustawienie EnableSessionState = "False" jako dyrektywy strony w Test2. – Chris