4

我有一个在应用程序域之外执行UserPrincipal(和GroupPrincipal)的应用程序。FindByIdentityWithType这一直有效到上周。从那时起,我在我的开发机器上安装了 Visual Studio 2012,我的代码停止工作,并出现PrincipalOperationException{“无法检索有关域的信息 (1355)。”}。windows错误号为80131501

我不知道 VS2012 安装、一些安全更新和此错误的出现之间是否存在关联。

我在创建上下文时使用 SimpleBind,并且在 ADSIEdit 中使用相同的设置来访问域仍然有效。

我在应用程序测试期间捕获了 WireShark,并且: TCP/LDAP 包表明成功!我收到了 LDAP 搜索结果包,可以看到它在 Wireshark 中的内容是正确的。您可以在 wireshark 中看到 searchRequest 和 searchResponse - 请求的值是正确的,并且使用正确的目录对象回答了请求。在收到错误之前 3 或 4 个数据包,我可以看到我的客户端和 2008R2 服务器之间的 ldap 流量中有一个端口正在改变。客户端是 Windows7(我没有打开防火墙,我尝试禁用病毒扫描程序)。

我想稍后 System.DirectoryServices.AccountManagement 实例化 UserPrincipal 时可能会出现问题(我尝试了这个,因为我怀疑我的一些 UserPrincipalEx 属性可能是异常的原因)。这个猜测是基于 ldap 查询被执行并很好地回答的事实。

我知道MemberOf如果您的客户端不受该域的信任,您将永远无法在 DirectoryObject 上执行方法。但是 UserPrincipal 的简单实例化为我工作了几个月,直到今天。

我在开发环境中使用主机条目而不是 DNS。它工作了几个月。服务器没有客户端的 DNS 知识,也从来没有。

对解决方案的任何提示都会很棒!

主机条目:

192.168.19.101  mhvtest.loc #thats the domain (local vmware) entry
192.168.19.101  mhvdc1.mhvtest.loc #thats the domain controller entry
192.168.19.102  mhvex1.mhvtest.loc

堆栈跟踪是:

   at System.DirectoryServices.AccountManagement.Utils.GetDcName(String computerName, String domainName, String siteName, Int32 flags)
   at System.DirectoryServices.AccountManagement.ADStoreCtx.LoadDomainInfo()
   at System.DirectoryServices.AccountManagement.ADStoreCtx.get_DnsDomainName()
   at System.DirectoryServices.AccountManagement.ADStoreCtx.GetAsPrincipal(Object storeObject, Object discriminant)
   at System.DirectoryServices.AccountManagement.ADStoreCtx.FindPrincipalByIdentRefHelper(Type principalType, String urnScheme, String urnValue, DateTime referenceDate, Boolean useSidHistory)
   at System.DirectoryServices.AccountManagement.ADStoreCtx.FindPrincipalByIdentRef(Type principalType, String urnScheme, String urnValue, DateTime referenceDate)
   at System.DirectoryServices.AccountManagement.Principal.FindByIdentityWithTypeHelper(PrincipalContext context, Type principalType, Nullable`1 identityType, String identityValue, DateTime refDate)
   at System.DirectoryServices.AccountManagement.Principal.FindByIdentityWithType(PrincipalContext context, Type principalType, String identityValue)
   at System.DirectoryServices.AccountManagement.UserPrincipal.FindByIdentity(PrincipalContext context, String identityValue)
   at Idda2.ActiveDirectory.UserPrincipalEx.FindByIdentity(PrincipalContext context, String identityValue) in D:\Users\vogt\Documents\src\idda2\trunk\Idda2.ActiveDirectory\UserPrincipalEx.cs:line 130
4

0 回答 0