Тази статия е огледална статия за машинен превод, моля, кликнете тук, за да преминете към оригиналната статия.

Изглед: 29669|Отговор: 3

[ASP.NET] ASP.NET няколко заявки на страницата едновременно, има ситуация на блокираща суспендирана анимация

[Копирай линк]
Публикувано в 22.09.2017 г. 17:32:59 ч. | | | |
Напоследък, когато работех по проект, някои страници трябваше да заредят много данни, а понякога кликвах върху страницата без да чакам да се зареди, а после пак кликвах на друга страница

Ще има много бавно състояние на суспендирана анимация при зареждане на уеб страницата, затова нека го разгледаме внимателно днес.

Първоначално мислех, че тази ситуация ще се случи на много сайтове или на проблема ми с компютърната мрежа, но установих, че този сайт няма такава ситуация – понякога се зациклях при публикуване, но кликвах на други страници в таба, за да заредя бързо.

Нека разгледаме по-отблизо днес!! Кодът беше тестван първи:

Код за Homeview:

Код на контролера:



За анализ на тестов код нашият контролер има 3 метода – единият е началната страница, а другите два са тестови методи

Заявката Test1 блокира за 5 секунди и след това връща данните на потребителя

Test2 заявките няма да блокират и ще върнат данни директно на потребителя

Нашата начална страница има два интерфейса за заявки на Ajax, които са асинхронни заявки, така че няма проблем с блокирането.

Ще установим, че методът Test1 извежда съдържание само след като Test2 издаде съдържание (Обикновено страницата директно извежда съдържанието, върнато от Test2, и след това изчаква 5 секунди, за да изведат съдържанието, върнато от Test1, защото js не блокира



След това директно достъпваме интерфейсите Test1 и Test2, първо достъпваме Test1, а след това веднага достъпваме Test2, и установяваме, че Test2 трябва да изчака, докато Test1 се върне, за да завърши, както е показано на фигурата по-долу:



Ако заявка за страница постави заключване на четец, други заявки, които се обработват едновременно в същата сесия, няма да могат да актуализират състоянието на сесията, но поне могат да бъдат прочетени. Ако страница поиска заключване за запис за състоянието на сесията, всички останали страници се блокират, независимо дали искат да четат или пишат съдържание. Например, ако два програмни изгледа пишат съдържание в една и съща сесия по едно и също време, едната програма трябва да изчака другата програма да бъде завършена, преди да може да бъде написана. В програмирането на AJAX е важно да се знае за това.

Специална бележка: Само при писане на сесия Asp.net блокира заявката, но докато сте посетили страницата, където е записана сесията, например операцията след влизане в системата с нея (сесията е заключена до изтичането си, разбира се, само в случай че SessionID е същият). Ще има този проблем.

Netizen информация

Докато уебсайтът използва сесия, всяка заявка ще я заключва през целия ѝ живот, така че заявките с един и същ sessionid трябва да изчакат да бъдат отключени

Това означава, че ако сайтът има страница с ограничено време, той не може да направи нищо и трябва да изчакате страницата с ограничено време да се зареди.

Не можеш да го направиш, няколко едновременно заявки на Ajax на една и съща страница, не можеш да го направиш, изпращай заявки за анкетиране.



В обобщение:Ако проведете сесия към заявката, ако не направите сесия по заявката, горната ситуация няма да се случи

Решение:

Добавена функцията SessionState(System.Web.SessionState.SessionStateBehavior.ReadOnly) към контролера на контролера

Бележка:

Задължително означава, че искате изключителна заключване на Session (т.е. без паралелна обработка на заявки за един и същ session ID)
ReadOnly означава, че искате неексклузивна заключване в Session (т.е. заявката ви все още трябва да изчака за заявки с ексклузивно заключване, за да приключи, но можете да обработвате заявки с неексклузивни заключения заключва се паралелно. Въпреки това, зависи от вас да се уверите, че кодът ви няма да се записва в Session. Не е задължително да се налага от рамката)
Задължително означава сесийния мютекс, който сте поискали (т.е. няма изискване да обработвате същия SessionID паралелно)

ReadOnly означава, че сесията, която искате, е неексклузивна заключваща (т.е. заявката ви все още трябва да изчака за завършване, заявката за ексклузивен заключване, но можете да обработите заявка с паралелна неексклузивна заключваща връзка). Но трябва да сте сигурни, че кодът ви не записва сесии. Не е задължително да се изпълнява от фреймуърка)





Предишен:CEF: Вградете Chrome за клиента
Следващ:HTTP грешка 503. Услугата не е налична.
Публикувано в 6.07.2018 г. 11:53:31 ч. |
За WebForms, добавете след страницата в горната част на aspx (просто заредете тази блокираща страница):

EnableSessionState="ReadOnly"
 Хазяин| Публикувано в 14.07.2019 г. 20:34:17 ч. |
Повечето уеб разработки използват сесии за запазване на състояния на сесиите, но използването на сесии в asp.net приложения може да има значително влияние върху производителността на уеб приложенията. Защо и какво ще го засегне е анализирано по-долу

Обяснението на MSDN за съвместни заявки и сесии гласи:

Паралелни заявки и статус на сесия
Достъпът до състоянието на ASP.NET сесия е на сесия, което означава, че ако двама различни потребители изпратят заявка едновременно, достъпът до всяка отделна сесия се предоставя едновременно. Въпреки това, ако двете едновременни заявки са за една и съща сесия (чрез използване на една и съща стойност на SessionID), първата заявка ще получи изключителен достъп до информацията за сесията. Втората заявка ще бъде изпълнена едва след като първата заявка бъде завършена. (Ако ексклузивната заключване на информацията за сесията бъде освободена, защото първото искане надвишава времето за заключване, втората сесия също получава достъп.) Ако зададете стойността на EnableSessionState в директивата @Page на ReadOnly, заявките за информация само за четене на сесиите не водят до изключителна заключване върху данните от сесията. Въпреки това, заявките само за четене към сесийни данни може да се наложи да изчакат, докато заключването бъде отключено от заявката за четене/запис, зададена от данните на сесията.
Отричане:
Целият софтуер, програмни материали или статии, публикувани от Code Farmer Network, са само за учебни и изследователски цели; Горното съдържание не трябва да се използва за търговски или незаконни цели, в противен случай потребителите ще понесат всички последствия. Информацията на този сайт идва от интернет, а споровете за авторски права нямат нищо общо с този сайт. Трябва напълно да изтриете горното съдържание от компютъра си в рамките на 24 часа след изтеглянето. Ако ви харесва програмата, моля, подкрепете оригинален софтуер, купете регистрация и получете по-добри услуги. Ако има нарушение, моля, свържете се с нас по имейл.

Mail To:help@itsvse.com