.net WCF通过IHttpModule设置Thread.CurrentPrincipal

.net WCF通过IHttpModule设置Thread.CurrentPrincipal,.net,wcf,authentication,ihttpmodule,.net,Wcf,Authentication,Ihttpmodule,我有一个wcf+RESTWeb服务,aspNetCompatibility=true。 为了提供自定义身份验证,我编写了asp.net http模块:IHttpModule。代码非常简单:只需为Thread.CurrentPrinicpal属性分配一些主体 在方法执行期间,我仍然将'empty/default'主体作为Thread.CurrentPrincipal的值。我还注意到模块和操作执行中有不同的线程ID thread.CurrentThread。我建议wcf提供一个新线程来执行操作,但还

我有一个wcf+RESTWeb服务,aspNetCompatibility=true。 为了提供自定义身份验证,我编写了asp.net http模块:IHttpModule。代码非常简单:只需为Thread.CurrentPrinicpal属性分配一些主体

在方法执行期间,我仍然将'empty/default'主体作为Thread.CurrentPrincipal的值。我还注意到模块和操作执行中有不同的线程ID thread.CurrentThread。我建议wcf提供一个新线程来执行操作,但还没有找到任何证据

所以问题是:我说的对吗?wcf允许控制这种行为吗? 我在这里感到困惑,因为创建新线程会自动将主体移动到新线程。因此,wcf会“清理”它们

principalPermissionMode=None也存在同样的问题

如果您有任何想法,我将不胜感激


干杯

IMO-当您从已安装了主体的线程运行主体时,该线程将接收主体

Wcf确实以自己的方式管理线程,部分由InstanceMode-PerCall、PerSession等控制。。。。所以他们不会发布你的线程细节


也许您应该考虑使用另一个模型进行身份验证。有关自定义身份验证的更多详细信息,请参阅本文:

第一句话你说得对。事实上,我用wcf的IAuthorizationPolicy解决了这个问题。但正如我写的,我想弄清楚为什么它是以这种方式工作的,我们有任何设置来控制这种行为吗?