我有一个应用程序在应用程序域外执行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查询并回答得很好的事实。
我知道如果您的客户端不信任该域,您就永远无法在DirectoryObject上执行MemberOf
之类的方法。但UserPrincipal的简单实例化为我工作了几个月直到今天。
我在开发环境中使用hosts条目而不是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
Stacktrace是:
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