我有一个WCF服务,需要知道主叫用户的Principal。
在我所拥有的服务的构造函数中:
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标头添加到操作上下文中吗?这样的东西可以节省一大堆复制/粘贴,我宁愿不这样做,但我不知道如何实现它:)
由于
答案 0 :(得分:3)
通过在配置中指定自定义策略,通过IAuthorizationPolicy
设置WCF主体的正确时间。完整涵盖here。如果您尝试在其他点设置主体(可能是检查员),系统可以重置它。