Один веб-запрос к IIS остается в одном потоке? - PullRequest
5 голосов
/ 09 февраля 2011

Я хочу написать http-модуль регистрации, который хранит список событий журнала для одного запроса в локальном хранилище потока во время выполнения запроса.В End_Request я хочу записать все события обратно в постоянное хранилище.

Вопрос в том, будет ли один запрос соответствовать одному потоку?Т.е. я могу предположить из любого места в моем коде, что я могу добавить элементы в IEnumerable, и они будут все вместе в конце запроса.

Ответы [ 5 ]

5 голосов
/ 09 февраля 2011

Нет. ASP.NET потенциально может переключать потоки при обработке запроса. Это называется поточностью.

Есть только определенные точки, где это может / будет делать это. Я не могу вспомнить, что они находятся на моей голове - в поисках ссылки сейчас ...

Но краткий ответ - НЕТ : вы не можете полагаться на то, что одно и то же локальное хранилище доступно для всего периода запроса.

4 голосов
/ 09 февраля 2011

Возможно, вам лучше использовать Context.Items , а не хранилище потоков - это для каждого запроса. Вам не нужно беспокоиться о том, что сервер делает со своими потоками таким образом.

0 голосов
/ 09 февраля 2011

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

0 голосов
/ 09 февраля 2011

Я бы посмотрел на использование ELMAH и / или log4net, чтобы получить то, что вам нужно, поскольку он прост в использовании и теперь еще проще в установке с помощью диспетчера пакетов NuGet.

http://code.google.com/p/elmah/

http://logging.apache.org/log4net/

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

0 голосов
/ 09 февраля 2011

Сеанс остается постоянным на протяжении всего запроса.Почему бы не использовать это?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...