我有一个 WCF 服务需要知道调用用户的委托(delegate)人。
在我拥有的服务的构造函数中:
Principal = OperationContext.Current.IncomingMessageHeaders.GetHeader<MyPrincipal>("myPrincipal", "ns");
在调用代码中我有类似的东西:
using (var factory = new ChannelFactory<IMyService>(localBinding, endpoint))
{
var proxy = factory.CreateChannel();
using (var scope = new OperationContextScope((IContextChannel)proxy))
{
var customHeader = MessageHeader.CreateHeader("myPrincipal", "ns", Thread.CurrentPrincipal);
OperationContext.Current.OutgoingMessageHeaders.Add(customHeader);
newList = proxy.CreateList();
}
}
一切正常。
我的问题是,如何避免必须在 using (var scope...{ [create header and add to OperationContext]
?
我可以创建一个自定义 ChannelFactory 来处理将 myPrincipal header 添加到操作上下文吗?这样的事情会节省我不想做的整个复制/粘贴负载,但我不确定如何实现它:)
谢谢
最佳答案
设置 WCF 主体的正确时间是通过 IAuthorizationPolicy
,通过在配置中指定自定义策略。这完全涵盖了 here .如果您尝试在其他点(可能是检查员)设置委托(delegate)人,它可能会被系统重置。
关于WCF - 在 header 中传递 CurrentPrincipal,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2689521/