Веб-сад и статические объекты трудно понять

Я нахожусь в процессе расследования, чтобы преобразовать наше веб-приложение в веб-ферму. Итак, я начал с веб-сада, преобразовав "Максимальный рабочий процесс = 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 ответ

Решение

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

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

IIS может отключить keepalive для целей тестирования из раздела HTTP Response Headers в IIS Manager, в разделе Set Common Headers. Это должно заставить ваш браузер открывать новое соединение для каждого запроса.

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

Другие вопросы по тегам