У меня возникли проблемы с пониманием того, как IIS обрабатывает статические переменные в своих потоках. Я всегда понимал, что если IIS имеет 4 рабочих процесса, он может обрабатывать 4 запроса одновременно и что это будет то же самое, что иметь 4 отдельных потока, работающих на веб-сайте. Любые статические переменные будут сохраняться в каждом отдельном потоке. Причина, по которой я немного сбит с толку, заключается в том, что у меня есть созданная область, которая управляет соединениями и транзакциями кэширования. Когда я тестирую приложение, я не замечаю каких-либо проблем, но после того, как я скомпилировал его и одновременно нажал на него из двух разных мест, у меня, похоже, возникает конфликт. Теперь, если эти рабочие процессы являются отдельными, почему это будет? Можно ли обрабатывать более одного запроса в одном рабочем потоке одновременно? Это чрезвычайно важно, поскольку в этих статических элементах хранятся уникальные идентификаторы для обработки объектов, управляющих этими функциями, и создается впечатление, что они пытаются получить доступ к одному и тому же объекту.
Я запускаю это на IIS-сервере Vista на компьютере x64.
EDIT
Для значений, которые должны сохраняться в потоке по одному запросу, я помещаю эти значения в Web.HttpContext.Current.Items
, что, похоже, помогает.
<ThreadStatic()>
может быть использовано, но оно может быть недоступно во время начала процесса запроса. В одном модуле, который у меня есть, используется только для переменной, чтобы указать, что этот поток уже загрузил настройки для сервера каскадирования. Если true, то протектор (не asp.net) готов к извлечению данных с сервера кэширования.