2013-04-18 2 views
1

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

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

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

Та же проблема с mainPermissionMode = "None".

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

Cheers!

ответ

0

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

Wcf управляет потоками по-своему (частично контролируется InstanceMode - PerCall, PerSession, ...). Поэтому они не будут распространять информацию о ваших потоках.

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

+0

Вы имеете право с первого предложения. На самом деле я решил IAuthorizationPolicy с wcf. Но, как я писал, я хочу получить четкое представление о том, почему он работает таким образом, и есть ли у нас какие-либо настройки для контроля этого поведения? – SchmerZ