AcquireRequestState vs PreExecuteRequestHandler

Мы получили довольно большое количество вызовов ajax, занимающих значительное количество времени в AcquireRequestState, в наших путешествиях мы наткнулись на фиксацию сеанса в ASP.Net, поэтому мы внедрили пользовательский обработчик состояния сеанса (на основе ссылки ниже),

После внесения изменений и их развертывания мы увидели очень резкое падение в AcquireRequestState, но оно было заменено на PreExecuteRequestHandler.

Сегодня утром мне внезапно стало ясно, что мы включили OWIN, что, вероятно, было причиной того, что PreExecuteRequestHandler занял так много времени. Затем я решил удалить это, и когда я развернул код, PreExecuteRequestHandler исчез из списка. К сожалению, теперь он был заменен на AcquireRequestState снова в значительной степени с той же стоимостью.

Нам кажется, что на AJAX-вызовы очень много ударов, которые возвращают частичные представления, вызовы AJAX, возвращающие примитивные типы, или объекты JSON, по-видимому, в значительной степени не затронуты, несмотря на более высокую пропускную способность.

Итак, это оставляет мне три вопроса, на которых я абсолютно зациклен, и я предполагаю, что ответ за одного приведет нас к ответу для других 2.

1) Почему стоимость перехода с AcquireRequestState на PreExecuteEventHandler при установке OWIN? Что-то на OWIN отмечено как IRequireSessionState? (Насколько я понимаю, AcquireRequestState должен был произойти ранее в управляемом конвейере)

2) Как получить дополнительную информацию о том, что происходит внутри этого AcquireRequestState? Или наше время лучше потрачено на возвращение объекта JSON и использование этого для визуализации того, что нам нужно в пользовательском интерфейсе?

3) Мы видим пару запросов (очень немногих), которые отображаются в /{controller}/{action}/{id} в New Relic и затем полностью застревают на протяжении всего запроса в вышеупомянутом, Это несмотря на ограничение ограничений нашей маршрутизации только на пути к контроллерам и действиям, которые мы имеем в проекте.

PS: Это похоже на следующее: мы также видим это в New Relic: длительные задержки в AcquireRequestState

Пользовательский модуль сеанса: Я только что узнал, почему все сайты ASP.Net медленны, и я пытаюсь решить, что с этим делать

Ответ 1

Для тех, кто пытается исключить проблему сеанса, с которой мы в конечном итоге столкнулись, но кому все еще нужно полагаться на значения сеанса (так что вы не можете просто отключить сеанс на уровне контроллера), посмотрите на следующего поставщика состояния сеанса:

https://github.com/aspnet/AspNetSessionState

В частности, убедитесь, что вы обратили внимание на следующие настройки приложения:

<add key="aspnet:AllowConcurrentRequestsPerSession" value="[bool]"/>

Вам нужно будет обновить до .Net Framework 4.6.2, но в нашем случае это небольшая цена.

Ответ 2

Я сталкиваюсь с той же проблемой, PreExecuteRequestHandler занимает много времени. Я тоже использую Овина. Поэтому мне любопытно, сможете ли вы решить эту проблему.

Любое предложение приветствуется!

Спасибо