Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Доступ к HttpContext.Current из дочернего потока
|
|||
|---|---|---|---|
|
#18+
Привет. Как организовать доступ к HttpContext.Current из дочернего потока? Можно передавать его параметром в Task, например, но есть ли способы получше? Хотелось бы, чтоб контекст был доступен без необходимости вспоминать, что его нужно добавить параметром. Спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.01.2016, 19:02 |
|
||
|
Доступ к HttpContext.Current из дочернего потока
|
|||
|---|---|---|---|
|
#18+
HttpContext.Current устанавливается при продолжении (await, Task.ContinueWith) через контекст синхронизации AspNet. Во всех остальных случаях его нужно передавать вручную. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.01.2016, 20:48 |
|
||
|
Доступ к HttpContext.Current из дочернего потока
|
|||
|---|---|---|---|
|
#18+
mabanza, Опасно передавать в отдельный поток HttpContext.Current не через await/CW как сказал Алексей, так как HttpContext.Current может умереть раньше, чем закончится выполнение работы в потоке. Поэтому нет способа «по-лучше», есть правильный и неправильный способ. Передавать отдельным параметром — неправильно по сути. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.01.2016, 12:38 |
|
||
|
Доступ к HttpContext.Current из дочернего потока
|
|||
|---|---|---|---|
|
#18+
Да нет, с тасками все работает. По-подробней это WCF с доступом HttpContext (есть такая конфигурация). Основоной код порождает тучу потоков и передает контекст в каждый. Потом ждет WaitAll. Потом покидает скоп и, конечно, контекст исчезает. Но к этому моменту вся работа сделана. Плохо то, что надо городить огород с передачей контекста, изменением конструкторов, которые теперь принимают контекст. Как-то это не по-архитектурски. А почему сам таск доступа к контектсу не имеет, а континью виз имеет? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.01.2016, 19:01 |
|
||
|
Доступ к HttpContext.Current из дочернего потока
|
|||
|---|---|---|---|
|
#18+
mabanzaА почему сам таск доступа к контектсу не имеет, а континью виз имеет?Потому что "сам таск" выполняется не через контекст синхронизации, который устанавливает ThreadStatic поле класса, хранящее ссылку HttpContext.Current. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.01.2016, 18:02 |
|
||
|
Доступ к HttpContext.Current из дочернего потока
|
|||
|---|---|---|---|
|
#18+
mabanzaОсновоной код порождает тучу потоков и передает контекст в каждый. Потом ждет WaitAll.Можно попробовать отказаться от "ручного" порождения потоков в пользу асинхронного ожидания через порт I/O, другими словами использовать встроенные асинхронные операции для работы с БД, сокетами и т. п. Так же по возможности заменить WaitAll на await Task.WhenAll . зы: Если есть такая возможность, конечно же. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.01.2016, 18:08 |
|
||
|
Доступ к HttpContext.Current из дочернего потока
|
|||
|---|---|---|---|
|
#18+
Привет. Что-то не работает рецепт с континьб виз. Код Код: c# 1. 2. 3. 4. 5. 6. 7. на этапе "result = dal.GetScalar(sql);" наталкивается на HttpContext.Current=null Если это то, что вы имели ввиду, почему не работает? Спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.01.2016, 20:12 |
|
||
|
Доступ к HttpContext.Current из дочернего потока
|
|||
|---|---|---|---|
|
#18+
Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. зы: Использовать await удобнее. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.01.2016, 05:27 |
|
||
|
Доступ к HttpContext.Current из дочернего потока
|
|||
|---|---|---|---|
|
#18+
Вы не могли бы пояснить в чем удобство await? В коде для ContinueWith вы все равно передаете контекст. Мой вопрос был - как получать контекст автоматически, без передачи? Передавать его параметром в Task, почти то же самое для меня, что и внедрять его через коструктор или через get или еще как-то. Вот мой код для async/await Код: c# 1. 2. 3. 4. Здесь при выполнении первого оператора контекст присутствует. Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. Здесь при выполнении строки А контекста как не было так и нет. Назад к параметрам? Тогда в чем удобство await? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.01.2016, 18:12 |
|
||
|
Доступ к HttpContext.Current из дочернего потока
|
|||
|---|---|---|---|
|
#18+
Кстати, ваш код Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. возвращает упорный NULL для HttpContext.Current ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.01.2016, 18:42 |
|
||
|
Доступ к HttpContext.Current из дочернего потока
|
|||
|---|---|---|---|
|
#18+
mabanza, Замыкания - наше все! Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.01.2016, 11:53 |
|
||
|
Доступ к HttpContext.Current из дочернего потока
|
|||
|---|---|---|---|
|
#18+
Это то с чего я начал прежде чем написать сюда. Это приводит к иньекции контекса через конструктор при передаче из потока в поток и туевой хуче модификаций всех кострукторов. Между прочим, при таком способе Session не доступен. Application и Cache есть, а сессия нул. Тем не менее спасибо. Похоже, проблема неразрешимая. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.01.2016, 16:29 |
|
||
|
Доступ к HttpContext.Current из дочернего потока
|
|||
|---|---|---|---|
|
#18+
mabanzaМежду прочим, при таком способе Session не доступен. Application и Cache есть, а сессия нул. Тем не менее спасибо. Похоже, проблема неразрешимая. Если это WCF - то скорее сессию нужно как то включать отдельно. Нет тут никакой проблемы, контекст передается через Thread.Get/SetData и существует только для текущего потока, который был запущен для обработки запроса. Какого рожна он должен быть виден в других потоках? ИХМО изначально плохо продуманная архитектура, дикая смесь WCF и HttpContext. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.01.2016, 17:40 |
|
||
|
Доступ к HttpContext.Current из дочернего потока
|
|||
|---|---|---|---|
|
#18+
>Какого рожна он должен быть виден в других потоках Такого рожна, что это дочерние потоки. Можно сконфигурировать основной поток WCF функции так, что она будет ожидать завершения всех запущенных дочерних потоков. И только потом выйдет из скопа. Без всяких операторо Wait. Задача передать контекст этого потока в дочерние так, чтоб не модифицировать больше количество кода, а именно конструкторы. >дикая смесь WCF и HttpContext ??? WCF работает с контекстом ASP.NET непринужденно. Скорее дикая смесь - это ваши представление о WCF. Без обид. WCF может работать со своим контекстом в модели PerSession, но не все байндинги это поддерживают. basicHttpBinding, который я использую, один из них. Я вынужден использовать ASP.NET контекст. Спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.01.2016, 19:52 |
|
||
|
Доступ к HttpContext.Current из дочернего потока
|
|||
|---|---|---|---|
|
#18+
mabanzaКстати, ваш код Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. возвращает упорный NULL для HttpContext.Current В .Net Framework 4.5.1 работает. Уточни версию, такое поведение появилось сравнительно недавно. Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.01.2016, 05:29 |
|
||
|
Доступ к HttpContext.Current из дочернего потока
|
|||
|---|---|---|---|
|
#18+
mabanzaПохоже, проблема неразрешимая."Нам бы только иностранное ругать." (ц) из к/ф "О бедном гусаре замолвите слово" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.01.2016, 05:33 |
|
||
|
Доступ к HttpContext.Current из дочернего потока
|
|||
|---|---|---|---|
|
#18+
Версия 4.5 Есть разница между моим и вашим кодом. Я создаю пустую задачу и не передаю контекст. Я передаю контекст только в continueWith. В вашем коде контекст передается сразу и в фактори. Может в этом различие. Попробую попозже. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.01.2016, 01:02 |
|
||
|
Доступ к HttpContext.Current из дочернего потока
|
|||
|---|---|---|---|
|
#18+
mabanzaЕсть разница между моим и вашим кодом. Я создаю пустую задачу и не передаю контекст. Я передаю контекст только в continueWith. В вашем коде контекст передается сразу и в фактори. Может в этом различие. Попробую попозже.В моём коде контекст синхронизации передаётся только в ContinueWith. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.01.2016, 04:37 |
|
||
|
|

start [/forum/topic.php?fid=18&msg=39146758&tid=1356076]: |
0ms |
get settings: |
8ms |
get forum list: |
20ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
34ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
68ms |
get tp. blocked users: |
1ms |
| others: | 265ms |
| total: | 416ms |

| 0 / 0 |
