Создайте потоки в вызове ASP.NET, которые сохраняют HTTP-контекст - PullRequest
1 голос
/ 09 марта 2012

У меня есть страница ASP.NET ASPX, которая принимает и возвращает XML.

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

Оказывается, что HTTP-контекст не является потокобезопасным и всегда имеет значение NULL в каждом потоке. Контекст необходим для кэширования объектов XSLT, чтобы каждому потоку в каждом запросе не приходилось каждый раз считывать данные с диска. Кеширование фактически никогда не работало.

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

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

1 Ответ

0 голосов
/ 09 марта 2012

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

Я предполагаю, что вы захотите поделиться этим объектом контекста с определенным сеансом: вы можете сделать этоодним из нескольких способов:

  • Сохраните его в статической коллекции с ключом, уникальным для каждого сеанса.

  • Сохраните его в сеансе.

  • Сохраните его в кэше ASP.NET с ключом, уникальным для каждого сеанса.

Без дополнительной информации о том, чего вы пытаетесь достичь, трудно посоветовать, что лучше.

...