首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >创建PrincipalContext时代码崩溃

创建PrincipalContext时代码崩溃
EN

Stack Overflow用户
提问于 2013-01-16 17:19:58
回答 1查看 2K关注 0票数 2

每当我调用这个方法时,我都会崩溃。

代码语言:javascript
复制
    public bool findSAMAccountByName(string environmentUserName)
    {
        try
        {
            const string Domain = "someserver";
            // set up domain context
            PrincipalContext ctx = new PrincipalContext(ContextType.Domain, Domain);

            // find a user
            UserPrincipal user = UserPrincipal.FindByIdentity(ctx, environmentUserName);

            if (user != null)
            {
                // do something here....     
                string samAccountName = user.SamAccountName;
                return true;
            }
            return false;
        }

        catch (Exception e)
        {
            e.ToString();
        }
        return false;
    }

内心的例外说

{“试图读取或写入受保护的内存。这通常表示其他内存已损坏”}

StackTrace是

代码语言:javascript
复制
 at System.DirectoryServices.Interop.UnsafeNativeMethods.IAds.GetEx(String bstrName, Object& value)
   at System.DirectoryServices.PropertyValueCollection.PopulateList()
   at System.DirectoryServices.PropertyValueCollection..ctor(DirectoryEntry entry, String propertyName)
   at System.DirectoryServices.PropertyCollection.get_Item(String propertyName)
   at System.DirectoryServices.AccountManagement.PrincipalContext.DoLDAPDirectoryInitNoContainer()
   at System.DirectoryServices.AccountManagement.PrincipalContext.DoDomainInit()
   at System.DirectoryServices.AccountManagement.PrincipalContext.Initialize()
   at System.DirectoryServices.AccountManagement.PrincipalContext.get_QueryCtx()
   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 ActiveRecord.MainWindow.findSAMAccountByName(String environmentUserName) in MainWindow.xaml.cs:line 60
   at ActiveRecord.MainWindow..ctor() in MainWindow.xaml.cs:line 39

我对这个方法的调用导致了崩溃。

代码语言:javascript
复制
                if (findSAMAccountByName(Environment.UserName))
                {
                    Console.WriteLine("Username found");
                }

如果我删除/注释代码,它将编译并运行良好。

更新:遵循DJ KRAZE的建议

代码语言:javascript
复制
const string Domain = "someserver";

在将PrincipalContext更改为接受2种增益之后,新的StackTrace是

代码语言:javascript
复制
      at System.Windows.Markup.WpfXamlLoader.Load(XamlReader xamlReader, IXamlObjectWriterFactory writerFactory, Boolean skipJournaledProperties, Object rootObject, XamlObjectWriterSettings settings, Uri baseUri)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-01-16 17:39:47

像这样的可可粉应该能用。

代码语言:javascript
复制
const string Domain = "SomeServer.Foo.Bar.com";
const string Username = "someUserSamAccountName";

PrincipalContext principalContext = new PrincipalContext(ContextType.Domain, Domain);
UserPrincipal userPrincipal = UserPrincipal.FindByIdentity(principalContext,  Username);

用值替换,如果找到或没有找到用户,这个值应该会返回。我每天都和AD一起工作,只是用我的帐号进行测试,希望这能帮助你改变你的方法来传递字符串samAccount,字符串DomanName;

可以遵循的硬编码示例

代码语言:javascript
复制
const string Domain = "SLO1.Foo.Bar.biz:389";
const string Container = @"DC=Foo,DC=Bar,DC=biz";
const string Username = @"cocoadev";//replace with actual samAccountName
PrincipalContext principalContext = new PrincipalContext(ContextType.Domain, Domain, Container);
UserPrincipal userPrincipal = UserPrincipal.FindByIdentity(principalContext,  username);
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14364056

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档