WCF устанавливает Thread.CurrentPrincipal через IHttpModule

У меня есть веб-сервис wcf + rest с aspNetCompatibility = "true". Для обеспечения пользовательской аутентификации я написал http модуль asp.net: IHttpModule. Код довольно прост: просто назначьте некоторый принципал свойству Thread.CurrentPrinicpal.

Во время выполнения метода я по-прежнему получаю принцип "пустой / по умолчанию" в качестве значения Thread.CurrentPrincipal. Также я заметил, что существуют разные идентификаторы потоков (Thread.CurrentThread) в выполнении модуля и операции. У меня есть предложение, чтобы wcf предоставил новый поток для выполнения операции, но не нашел никаких доказательств.

Итак, вопрос: я прав? Позволяет ли wcf контролировать это поведение? Я запутался здесь, потому что создание нового потока автоматически переместит участника в новый поток. Следовательно wcf "чистит" их..

Та же проблема с PrincipalPermissionMode="Нет".

Буду признателен за любые идеи!

Ура!

1 ответ

IMO - поток получит Принципал, когда вы запустите его из потока с уже установленным.

Wcf управляет потоками по-своему (частично управляется InstanceMode - PerCall, PerSession, ...). Таким образом, они не будут распространять ваши детали темы.

Может быть, вы должны рассмотреть возможность использования другой модели для аутентификации. См. Этот пост для получения дополнительной информации о пользовательской аутентификации: http://blogs.msdn.com/b/astoriateam/archive/2010/07/21/odata-and-authentication-part-6-custom-basic-authentication.aspx

Другие вопросы по тегам