Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/wcf/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
WCF服务-自定义主体_Wcf_Principal - Fatal编程技术网

WCF服务-自定义主体

WCF服务-自定义主体,wcf,principal,Wcf,Principal,在WCF服务类的构造函数中,我将当前主体设置为消息头中传递的主体: Thread.CurrentPrincipal = OperationContext.Current.IncomingMessageHeaders.GetHeader<BBPrincipal>("bbPrincipal", "ns"); Thread.CurrentPrincipal=OperationContext.Current.IncomingMessageHeaders.GetHeader(“bbPrinc

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

Thread.CurrentPrincipal = OperationContext.Current.IncomingMessageHeaders.GetHeader<BBPrincipal>("bbPrincipal", "ns");
Thread.CurrentPrincipal=OperationContext.Current.IncomingMessageHeaders.GetHeader(“bbPrincipal”、“ns”);
这似乎很好,但是当我在方法中引用主体时,Thread.CurrentPrincipal已恢复为WindowsPrincipal


该方法可能是在另一个线程上启动的。如何确保该方法使用服务构造函数中的主体集?

WCF始终在AuthorizationPolicy中设置主体,因此它可能会覆盖您的更改。您应该在那里实现并设置原则。

我刚刚找到了我最初问题的答案。要停止WCF使用空白主体重写主体,请在行为配置中设置以下内容:

<serviceAuthorization principalPermissionMode="None" />

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


请参阅:

您需要解释您试图实现的目标是什么。是否要在其他帐户/模拟下运行服务?当然,处理传入请求的线程将不同于服务创建的线程。您在哪里执行此代码:“将当前主体设置为消息头中传递的主体的线程”-我非常感兴趣,因为我有一个类似的问题。我也这么做了,谢谢!我尝试在验证用户凭据(在UserNamePasswordValidator中)时设置主体,并可以在我的服务中检索它。不管怎样,我想知道您是否遇到了一些不确定的问题,正如每个人(和ms文档)所说:“在自定义授权策略中设置您的主体”。Tnx再次提前。+1表示principalPermissionMode=“自定义”。另一个有用的例子是