Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/wcf/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# WCF-获取当前用户标识_C#_Wcf_Iis - Fatal编程技术网

C# WCF-获取当前用户标识

C# WCF-获取当前用户标识,c#,wcf,iis,C#,Wcf,Iis,我有一个silverlight应用程序,可以向服务器发送调用。服务器使用WCF服务执行调用。我希望能够检查“AfterReceiveRequest”功能,如果执行调用的用户是我期望的用户。如果没有-我想中止操作 问题是-我无法正确获取IIS用户名。 我试过这样做: OperationContext.Current.ServiceSecurityContext.WindowsIdentity.Name 及 只有当我从VisualStudio运行应用程序时,而不是在应用程序池上运行应用程序时,它们

我有一个silverlight应用程序,可以向服务器发送调用。服务器使用WCF服务执行调用。我希望能够检查“AfterReceiveRequest”功能,如果执行调用的用户是我期望的用户。如果没有-我想中止操作

问题是-我无法正确获取IIS用户名。 我试过这样做:

OperationContext.Current.ServiceSecurityContext.WindowsIdentity.Name

只有当我从VisualStudio运行应用程序时,而不是在应用程序池上运行应用程序时,它们才会给我正确的用户名。当我在应用程序池上运行应用程序时,我会在这两个参数中输入值:IIS APPPOOL\MyApplicationPool

客户端和服务器在同一台机器上,因此这看起来不像是一个双跳


有人能帮忙吗?我需要在Windows和基本身份验证中都使用它。

这些标识值来自用于WCF的身份验证方法。您应该发布WCF服务器端和客户端配置。要启用使用基于Windows身份验证的加密握手的Windows身份验证,请按照本文中的示例进行操作:

完成此操作后,您将能够在此处看到Windows标识:

ServiceSecurityContext.Current.PrimaryIdentity
关键是在服务器端的绑定级别打开安全模式

代码:

    var myBinding = new WSHttpBinding();
    myBinding.Security.Mode = SecurityMode.Message;
在配置中:

<bindings>  
  <wsHttpBinding>  
   <binding name = "wsHttpBinding_Calculator">  
     <security mode="Message">  
       <message clientCredentialType="Windows"/>  
     </security>  
    </binding>  
  </wsHttpBinding>  
</bindings> 

我不认为clientCredentialType=“Windows”是必要的,因为如果 如果未指定,您仍然可以获取windows用户标识


作为对您关于VS与IIS的观点的回应,这不应该是一个问题。我想说的是,IIS服务不知何故无法访问Active Directory域。这可能是权限问题。但是,默认情况下,IIS的工作方式应与Visual Studio相同,因为Visual Studio仅使用IIS Express。如果使用与IIS Express相同的用户名配置IIS,则它应具有通过域以相同方式进行身份验证的访问权限。注意:ServiceSecurityContext.Current.PrimaryIdentity不是IIS用户名。这是Windows用户名。

据我所知,您需要使用Windows身份验证。使用Windows身份验证时,您需要使用Windows用户名。您需要使用Windows身份验证来处理此操作。首先,即使使用Windows身份验证,上述参数的值也不正确。此外,我看不出有任何理由不使用基本身份验证,这真的帮助了我。谢谢
<bindings>  
  <wsHttpBinding>  
   <binding name = "wsHttpBinding_Calculator">  
     <security mode="Message">  
       <message clientCredentialType="Windows"/>  
     </security>  
    </binding>  
  </wsHttpBinding>  
</bindings>