Всем привет!
У меня система на asp.net web forms. Для отображения некоторых страниц требуется выполнять довольно большие запросы к БД (например, формирование отчетов). Отчет открывается в новом окне, как бы позволяя пользователю работать в основном пока отчет формируется.
Но проблема в том, что как только на сервер отправлен запрос и пока сервер не ответит, то хоть 10 окон открой, но ни в одном не будет загружаться информация пока не будет получен ответ сервера из первого окна (где инициировали загрузку).
При этом, если открыть 2 браузера, то параллельно работает все нормально. Проблема только в рамках одного.
Как это лечить? И лечиться ли?
На слух конечно такое решать сложно. Причина почему из разных браузеров работает скореее всего связана с тем что авторизация в разных браузерах инициирует разные идентификаторы сессий и фактически каждый пользователь живет своей жизнью что есть правильно.
Касательно основной задачи - проблема чисто архитектурная. Большие тяжелые SQL запросы нельзя выполнять синхронно с действиями пользователя. Как хотите обходите, но формирование отчета не может и не должно реализовываться через синхронный запрос. И нет - async/await ситуацию не исправит. Хотите делать визуальное представление данных - оптимизируйте запрос,денормализовывайте таблицы, стройте индексы, в общем разбирайтесь по query-plan что работает долго.
Некоторые расчеты можно предрасчитать заранее(хотя это большая редкость, но бывает).
Опять же вопрос - нужно ли пользователю весь набор данных отчета или только некая выжимка(топ-10 от чего-то). Если нужен весь - то может стоит реализовать через выгрузку в файл и почту, а не в интерфейс системы.
Если верить интернету, то в ASP.NET существует аналогичная проблема, потому как все запросы на сервер, работающие с сессией так же как и в PHP сериализуются, и обработка следующего запроса не начинается, пока не заканчивается предыдущий. Решается это установкой IReadOnlySessionState вместо IRequiresSessionState, в этом случае сессия не блокируется, и параллельный запрос (не зависимо от использования сессии) успешно обрабатывается.
Да, если отключить сессию, то сами страницы начинают работать нормально, но вот с Report Service беда - выдает ошибку In remote mode, the Report Viewer control requires session state be enabled or Report Server connection information specified in the config file.