Веб-сад и статические объекты трудно понять - PullRequest
0 голосов
/ 29 ноября 2011

Я занимаюсь расследованием преобразования нашего веб-приложения в веб-ферму. Итак, я начал с веб-сада, преобразовав «Максимальный рабочий процесс = 3». Ниже приведена упрощенная версия моей проблемы.

Ниже приведен мой класс статических объектов.

public static class MyStaticObject
{
public static string MyProperty {get;set;}
}     

Затем при загрузке страницы я инициализировал статические объекты следующим образом -

MyStaticObject.MyProperty = "My Static Property";

Затем с помощью asp.net ajax [WebMethod] создайте метод ajax на моей веб-странице

[WebMethod()]
public static string getStaticProperty()
{
  return MyStaticObject.MyProperty;
}

// Затем я вызываю этот метод Ajax с использованием Javascript и устанавливаю возвращаемое значение в текстовое поле.

Этот тест не работает должным образом. Ниже приведены мои предположения и неверный результат теста.

  1. Я думал, что когда мы устанавливаем виртуальный каталог как веб-сад, то каждый запрос к виртуальному каталогу обрабатывается другим процессом в веб-саду, поэтому мои следующие несколько запросов к серверу должны возвращать ноль, поскольку я инициализировал статические объекты для одного рабочего процесса. Но даже если я нажму кнопку ajax 20 раз подряд (что означает 20 запросов), даже тогда статические объекты возвращают мне значение.

  2. Правильно ли я считаю, что при перезапуске IIS должны быть уничтожены все статические объекты.

  3. Статические объекты не используются совместно в веб-садах / веб-фермах.

Меня удивляет поведение IIS, статических объектов и веб-сада.

Я предполагаю, что неправильно или мой метод тестирования неверен.

Спасибо.

1 Ответ

3 голосов
/ 04 декабря 2011

Ваши предположения о способе управления статическими объектами в AppPools / веб-садах верны.

Однако ваше предположение о способе распределения веб-запросов не соответствует действительности. HTTP-запросы циклически обрабатываются драйвером http.sys для рабочих процессов IIS, только когда устанавливается новое TCP-соединение, а не при поступлении нового запроса. Поскольку сообщения активности включены по умолчанию, даже если вы сделали 20 запросов подряд, они, вероятно, обслуживались одним и тем же рабочим процессом IIS.

IIS может отключить keepalive для тестирования в разделе заголовков ответа HTTP в IIS Manager в разделе «Установка общих заголовков». Это должно заставить ваш браузер открывать новое соединение для каждого запроса.

Чтобы протестировать с включенными сообщениями поддержки активности, вы можете использовать инструмент анализа емкости сети (WCAT), доступный в комплекте ресурсов IIS 6, для создания многопоточной загрузки, которая обращается к обоим процессам IIS в вашем веб-саду.

...