Установить пользовательский контекст - PullRequest
1 голос
/ 07 января 2010

Моя библиотека businesslayer \ data access используется как веб-приложением, так и службой wcf. Мне нужно установить текущий пользовательский контекст для каждого запроса для обоих этих приложений, который будет содержать идентификатор пользователя, IP-адрес, тип приложения и т. Д. И т. Д.

Библиотека, очевидно, не знает, какой тип приложения ее использует.

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

Это может быть глупый вопрос, но есть ли способ создать статическую переменную уровня потока, например OperationContext.Current или HttpContext.Current (что-то, что будет пропущено в конце текущего запроса)

Или каким-то другим способом, которым я мог бы достичь этой функциональности?

Ответы [ 2 ]

2 голосов
/ 07 января 2010

Подход по умолчанию к этому заключается в использовании Thread.CurrentPrincipal . Он должен соответствовать всем вашим требованиям.

В общем, IPrincipal является стандартной основой для моделирования пользовательского контекста в .NET. Например, HttpContext.User является IPrincipal.

0 голосов
/ 09 января 2010

Спасибо за помощь, но я использовал решение, предлагаемое по этой ссылке: http://elegantcode.com/2009/01/17/abstracting-request-state/

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

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