4

在我的 WCF 服务类的构造函数中,我将当前主体设置为消息头中传递的主体:

Thread.CurrentPrincipal = OperationContext.Current.IncomingMessageHeaders.GetHeader<BBPrincipal>("bbPrincipal", "ns");

这似乎工作正常,但是当我在方法中引用主体时,Thread.CurrentPrincipal 已恢复为 WindowsPrincipal。

大概该方法是在不同的线程上触发的。如何确保该方法使用服务构造函数中设置的主体?

4

2 回答 2

8

我刚刚找到了我原来问题的答案。为了停止 WCF 用空白覆盖主体,请在行为配置中设置以下内容:

<serviceAuthorization principalPermissionMode="None" />

就这么简单,无需对现有代码库进行彻底的更改。

请参阅:http ://connect.microsoft.com/VisualStudio/feedback/details/369445/wcf-service-configured-for-transport-security-shouldnt-change-thread-currentprincipal

于 2010-11-11T10:05:45.470 回答
4

WCF 始终在 AuthorizationPolicy 中设置主体,因此它可能会覆盖您的更改。您应该实施自定义授权策略并在那里设置委托人。

于 2010-09-20T09:27:42.323 回答