我可以在操作方法调用之前挂钩到任何WCF事件吗?

时间:2014-08-13 18:30:36

标签: c# wcf

我正在使用IPropertyInspector验证提供的令牌并获取相应的用户配置文件(如果未找到令牌或无效,则抛出错误异常)。然后,我根据建议的实现将此用户配置文件存储在OperationContext中:(Where to store data for current WCF call? Is ThreadStatic safe?

在我的服务实现类中,我希望用户配置文件是我可以轻松访问的字段,所以我的第一个想法是在构造函数中填充此字段,但不幸的是服务类在之前实例化 / em> IPropertyInspector触发。因此,作为替代方案,是否可以在WCF管道中订阅一些事件,该事件发生在IPropertyInspector运行之后,但在调用我的服务上的操作之前,我可以从操作上下文中填充此用户配置文件字段?

如果没有,我会在每次需要的时候使用 RemoteRequestContext.Current.Items [“User”]作为UserProfile ,但是一个字段会更干净,更方便。

2 个答案:

答案 0 :(得分:0)

您可以实现Attribute,IServiceBehavior和IDispatchMessageInspector接口,并在ApplyDispatchBehavior()方法中调用您的方法。它将在执行任何Operation方法之前每次执行。您只需在互联网上阅读有关Attribute,IServiceBehavior和IDispatchMessageInspector的信息。如果你在这里没有得到任何评论,我会给你一些源代码。

答案 1 :(得分:0)

我从这里得到了我需要的建议:How do I get access to the WCF service instance in the current context?

在Parameter Inspector中,我可以访问操作上下文,从中可以获取我的服务实例。因此,我不是通过订阅事件来提取服务中的信息,而是将其推送到参数检查器内的服务,如下所示:

  var service = OperationContext.Current.InstanceContext.GetServiceInstance() as IRemoteServiceBase;
  if (service != null)
        service.UserProfile = userFromToken;