WCF服务中的System.DirectoryServices.AccountManagement.PrincipalContext和模拟

问题描述:

在位于WCF服务后面的代码中使用PrincipalContext。 WCF服务模拟,允许“传递”类型的身份验证。WCF服务中的System.DirectoryServices.AccountManagement.PrincipalContext和模拟

虽然我在Active Directory(主要是System.DirectoryServices.Protocols命名空间)中所做的其他操作都可以在此场景中正常工作,但由于某些原因System.DirectoryServices.AccountManagement中的类仍然适用。

PrincipalContext context = new PrincipalContext(ContextType.Domain, domainName); 
UserPrincipal user = 
    UserPrincipal.FindByIdentity(context, IdentityType.SamAccountName, UserName); 

当我打这个电话给FindByIdentity,我得到一个收到COMException:失败示例代码“发生操作错误”。调用该PrincipalContext也失败,例如:

string server = context.ConnectedServer; 

两个OperationContext.Current.ServiceSecurityContextThread.CurrentPrincipal.Identity显示模拟工作正常。而且,就像我说的,S.DS.P中的其他AD任务工作正常。

如果我在PrincipalContext上明确设置了凭据,那么一切正常。例如:

PrincipalContext context = 
    new PrincipalContext(ContextType.Domain, domainName, user, password); 
UserPrincipal user = 
    UserPrincipal.FindByIdentity(context, IdentityType.SamAccountName, UserName); 

现在一切正常。但我不知道来电者的用户名和密码;我必须依靠模仿。

关于什么会导致我看到的问题的任何想法?

在此先感谢! James

确保为应用程序池设置了spn,将代理设置在AD中,并且应用程序池帐户具有作为os权限一部分的行为。

+0

我不确定您的应用程序池的spn是什么意思;我正在使用专用于此服务的应用程序池,只是不确定spn是什么。您需要在AD中为代表团设置什么?我会检查最后一个 – 2011-02-01 18:47:11

+0

spn =服务主要名称 – ecounysis 2014-11-11 16:56:43