WCF服务 - 自定义主体

时间:2010-09-20 09:13:33

标签: wcf principal

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

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

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

据推测,该方法是在不同的线程上触发。如何确保该方法在服务的构造函数中使用主体集?

2 个答案:

答案 0 :(得分:7)

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

<serviceAuthorization principalPermissionMode="None" />

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

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

答案 1 :(得分:4)

WCF始终在AuthorizationPolicy中设置主体,因此它可能会覆盖您的更改。你应该实现custom authorization policy并在那里设置校长。