在C#Asp.Net WCF中从上下文获取用户名

在C#Asp.Net WCF中从上下文获取用户名,c#,asp.net,.net,wcf,visual-studio-2012,C#,Asp.net,.net,Wcf,Visual Studio 2012,我目前维护一个遗留应用程序,我正在努力使它更易于测试,因为我发布了新的功能。该应用程序托管在IIS上,是.net 4.5上的WCF rest服务,它公开了几种不同的服务操作。为了让事情变得更好,我遇到了从上下文中获取用户名的问题 我真的不知道应用程序中有这么多不同的上下文,特别是当你真正想要的只是用户名或者伪造一些标题时。我目前知道的三个方面是: 他们三个都有关于MSDN的精彩文档,这就是为什么我在上面的项目符号中发布了相应的链接。因此,仅仅引导我去查阅文档并没有比我目前搜索的内容更有

我目前维护一个遗留应用程序,我正在努力使它更易于测试,因为我发布了新的功能。该应用程序托管在IIS上,是.net 4.5上的WCF rest服务,它公开了几种不同的服务操作。为了让事情变得更好,我遇到了从
上下文中获取用户名的问题

我真的不知道应用程序中有这么多不同的上下文,特别是当你真正想要的只是用户名或者伪造一些标题时。我目前知道的三个方面是:

他们三个都有关于MSDN的精彩文档,这就是为什么我在上面的项目符号中发布了相应的链接。因此,仅仅引导我去查阅文档并没有比我目前搜索的内容更有用

我的问题有点相关,所以我把它作为一个整体来编译

我从这里的这个简单答案中了解到WebOperationContext和HttpContext之间的真正区别(虽然他没有说明他从何处获得这些信息,但我相信这些信息隐藏在msdn的某个地方或个人经验中)

  • 前面提到的两个上下文与
    OperationContext
    有什么关系,从名称上猜测,我感觉,我可以用这个来掌握另外两个上下文中的任何一个,也可能没有
  • 我能否始终依靠
    OperationContext
    获取当前用户名或获取(甚至伪造)
    HttpRequest
    标题?或者我总是要依靠一个特定的工具来检索用户信息吗
  • 如果我的目的是伪造一个上下文来实现我想要的,我应该伪造哪个上下文?(我在项目中使用了
    fakeitesy
  • 目前,我的代码执行如下操作:

    if (OperationContext.Current != null && OperationContext.Current.ServiceSecurityContext != null)
      return OperationContext.Current.ServiceSecurityContext.WindowsIdentity;
    if (HttpContext.Current == null) return WindowsIdentity.GetCurrent();
    if (HttpContext.Current.User != null)
    {
      return HttpContext.Current.User.Identity as WindowsIdentity;
    }
    return WindowsIdentity.GetCurrent();
    
    我希望这段代码能让我明白为什么我如此困惑。我真的不知道靠什么来获取当前用户身份,从源代码库更改描述中,有人提到
    HttpContext。当前的
    并不总是获取正确的用户,因此必须检查
    OperationContext
    。什么时候,为什么会这样?我不知道

    我甚至很乐意读一本书,但我真的不知道该依靠什么