1

我在 VS2010 上使用 WCF 服务。

在我的客户端,Thread.CurrentPrincipal 填充了实现 IPrincipal 的自定义主体对象。

但是当 WCF 服务方法被调用时,服务端的 Thread.CurrentPrinicpal 是默认的 WindowsPrincipal。

如何使服务端 Thread.CurrentPrincipal 与客户端(自定义主体对象)相同?

请帮忙。

谢谢

4

1 回答 1

1

这是一种方法,但我不知道是否有更简单的方法:

您需要一个 IEndpointBehaviour 实现,该实现在 ApplyClientBehavior 方法中附加一个自定义消息检查器,该检查器又添加一个包含您的自定义主体实例的自定义消息头(在 BeforeSendRequest 方法中)。您可能需要使用 Data Contract 属性装饰您的自定义主体对象,以使其序列化。然后,实现一个自定义授权策略(类似于http://burcakcakiroglu.com/?p=2189),它将在服务器端运行并在 Evaluate 方法中再次读取自定义消息标头并复制标头中的主体进入evaluationContext.Properties [“Principal”]。

于 2012-09-07T14:52:23.710 回答