библиотека с использованием threadstatic для использования в asp.net - PullRequest
0 голосов
/ 11 февраля 2011

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

Теперь мне нужно использовать эту же библиотеку в приложении ASP.NET, и я узнал, что threadstatic не сделает мои переменные глобальными для одного потока, но они будут общими для всех потоков.

Я избегаю передачи переменных в функции, потому что это не очень хороший подход. Поэтому мне нужно решение, чтобы сделать мою библиотеку пригодной для обоих типов приложений (winforms + webforms), то есть альтернативы для threadstatic и session.

Как насчет реализации моего собственного управления с использованием словаря в библиотеке? Зная, кто вызвал меня (библиотеку), т. Е. Настольное приложение или asp.net, а затем, используя идентификатор потока или идентификатор сессии, соответственно, чтобы получить переменные из словаря. Сейчас я не знаю, возможно ли это или нет.

А что, если для этой библиотеки будет создан веб-сервис, который будет размещаться в exe-файле вместо IIS, чтобы избежать совместного использования потоков ASP.NET, что приведет к неисправности threadstatic?

Пожалуйста, предложите решение.

1 Ответ

0 голосов
/ 06 марта 2011

и я узнал, что threadstatic не сделает мои переменные глобальными для одного потока, но они будут распределены между потоками

Проблема не в том, что они будут общимичерез потоки, но через запросы.В ASP.NET потоки распределяются между запросами, и запросы могут даже обрабатываться более чем одним потоком (хотя я считаю, что это может произойти только в определенных местах / обстоятельствах).

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

Я не уверен, почему вы думаете, что это плохой подход - он звучит намного лучше, чем использование ThreadStatic:)

Как насчет реализации моего собственного управления с использованием словаря в библиотеке?Зная, кто вызвал меня (библиотеку), т.е. приложение для настольного компьютера или asp.net, и после этого, используя идентификатор потока или идентификатор сессии, соответственно, чтобы получить переменные из словаря.Прямо сейчас я не знаю, возможно ли это или нет.

Это звучит как большая работа, чтобы избежать передачи данных, но это должно быть возможно.Могут быть некоторые встроенные классы, чтобы сделать это немного проще, например, использование HttpContext.Items, который является кешем, существующим для каждого запроса, или CallContext, ноэто зависит от того, как именно ваш код используется.

...