2010-03-03 4 views
1

У меня есть страница меню. Если пользователь выбирает элемент меню, он открывает новое окно IE с использованием JavaScript. Таким образом, пользователь может открывать разные части приложений в нескольких IE Windows. Эти Windows имеют один и тот же сеанс. Моя проблема заключается в том, что эти страницы доступны синхронно? Если одно из дочерних окон ожидает завершения действия, никакой другой запрос из другого дочернего окна не будет обработан. Это из-за использования переменных Session?Почему мои страницы asp.net получают доступ синхронно?

Обновление: Это происходит только с окнами с одним и тем же родителем. Если у меня есть дочерние окна IE из разных родительских окон, то этой проблемы нет.

+0

Вы используете window.Open(), чтобы открыть новое окно? –

+0

Либо это проблема клиента/javascript, либо у вас есть что-то запирающееся на сервере, они ждут какого-то ресурса. Вы вручную блокируете что-нибудь? –

+0

Я в недоумении, как это могло произойти, вы уверены, что это действительно так? Мне трудно поверить, чтобы ваши страницы действительно работали синхронно таким образом, что я мог даже дистанционно видеть, что вы могли бы достичь этого, если бы захотели, если бы использовали длительные блокировки на общих ресурсах. –

ответ

2

Да, если каждая страница использует сеанс, то asp.net будет сериализовать активность против него. Если одному или нескольким из этих подстраниц нужен только доступ только для чтения, отметьте это в ваших директивах @Page (например, EnableSessionState = "ReadOnly") или полностью отключите его, если информация о сеансе не используется.

Как правило, это плохая планировка на долгое время работы на сервере, и, как вы обнаружили, это особенно актуально, если они используют сеанс.

Редактировать Последний FAQ here также описывает эту сериализацию.

Edit 2 В ответ на комментарий Re: закрытие дочернего окна:

Это в конечном счете обрабатывать другие запросы, как только заканчивается процесс на стороне сервера любой запрос он продолжал работать. Закрытие дочернего окна не отменяет запрос на стороне сервера. Лучше всего можно надеяться, что долговременный запрос имеет возможность проверять IsClientConnected каждый раз так часто и прервать его обработку, если он больше не подходит.

+0

+1> Есть и другие проблемы. Предположим, я закрываю дочернее окно, не позволяя ему закончить то, что он делал, и никакой другой запрос не обрабатывается вообще. – Amitabh

1

С точки зрения сервера у вас нет абсолютно никакого способа узнать, сколько окон браузера открыт.

Таким образом, нет, они не являются синхронными.

+0

Вы прочитали вопрос? –

Смежные вопросы