Ошибка при импорте пользователя из AD в мою пользовательскую веб-часть - PullRequest
0 голосов
/ 30 июля 2010

Я пытаюсь получить пользователя из активной директории в моей веб-части, но я где-то напуган, пожалуйста, помогите мне мой код, как показано ниже.

using System;
using System.Runtime.InteropServices;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Serialization;
using System.DirectoryServices;
using Microsoft.SharePoint;
using Microsoft.SharePoint.WebControls;
using Microsoft.SharePoint.WebPartPages;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Collections.Specialized;
using System.Collections;

namespace LdapTest2008
{
    [Guid("028042d8-7f77-4674-8b19-61b282e5ddf8")]
    public class LdapTest2008 : System.Web.UI.WebControls.WebParts.WebPart
    {
        public LdapTest2008()
        {
        }


        Label lblUsers = new Label();

        protected override void CreateChildControls()
        {
            base.CreateChildControls();

            // TODO: add custom rendering code here.
            // Label label = new Label();
            // label.Text = "Hello World";
            // this.Controls.Add(label);
        }

        public override void RenderControl(HtmlTextWriter writer)
        {
            base.RenderControl(writer);
            StringCollection StrCollectionReturn = new StringCollection();
            string strGroup = "My Group";

           StrCollectionReturn= GetGroupMembers(strGroup);

           lblUsers.Text = StrCollectionReturn.ToString();
           this.Controls.Add(lblUsers);
           writer.Write(lblUsers.Text);

        }


        //Query Active Directory to get users from Active Directory Groups
            public StringCollection GetGroupMembers(string strGroup)

            {
                string domain = "LDAP://Domain.COM";

                string domainAndUsername = "Domain.COM\\username";
                string passWord = "password";
                StringCollection groupMemebers = new StringCollection(); 


            try

            {
                            DirectoryEntry ent = new DirectoryEntry(domain,domainAndUsername,passWord);

                            DirectorySearcher srch = new DirectorySearcher("(CN=" + strGroup + ")");
                            srch.SizeLimit = 0;
                            srch.PageSize = 1000;

                            SearchResultCollection coll = srch.FindAll();

                            foreach (SearchResult rs in coll)
                            {
                                ResultPropertyCollection resultPropColl = default(ResultPropertyCollection);
                                resultPropColl = rs.Properties;


                                foreach (Object memberColl in resultPropColl["member"])
                                {
                                    DirectoryEntry gpMemberEntry = new DirectoryEntry("LDAP://"+ memberColl);

                                    System.DirectoryServices.PropertyCollection userProps = gpMemberEntry.Properties;

                                    //getting user properties from AD

                                    object obVal = userProps["displayName"].Value;

                                    object obAcc = userProps["sAMAccountName"].Value;

                                    if (null != obVal)
                                    {

                                        groupMemebers.Add("User Name:" + obAcc.ToString() + ", User login name:" + obVal.ToString() + "<br>");
                                    }
                                }
                            }
               }


                        catch (Exception ex)

                        {
                            ex.GetBaseException();
                           // writer.Write(ex.Message);
                        }



                  return groupMemebers;

            }
    }

}

При отладке этого кода я застрял здесь:

DirectorySearcher srch = new DirectorySearcher("(CN=" + strGroup + ")");

Это дает ошибку mes найденное нулевое значение.

Что я делаю неправильно?

Обновление:

Я допустил одну глупую ошибку, которую забылпередать объект Entry Entry поисковику.

DirectorySearcher srch = new DirectorySearcher(ent, "(CN=" + strGroup + ")"); ,

Теперь это работает, но теперь я получил ошибку в

DirectoryEntry gpMemberEntry = new DirectoryEntry("LDAP://"+ memberColl);

Я также попытался передать имя домена

DirectoryEntry gpMemberEntry = new DirectoryEntry("LDAP://DomainName"+ memberColl);

но все равно это выдает ошибку "выкинуло исключение типа System.Runtime.InteropServices.COMException

помогите пожалуйста в этом.

спасибо.

1 Ответ

0 голосов
/ 02 августа 2010

может быть strGroup пуст?Отладка и посмотреть, что он содержит.

Также может потребоваться проверить ту же строку в LDAPtool, чтобы увидеть, если он выдаст какие-либо результаты, как это, если strGroup не пуст.Ну, я думаю, что вы используете классы неправильно.И ваша строка LDAP тоже может быть неправильной.

Вот пример класса DirectorySearcher: http://msdn.microsoft.com/en-us/library/ms180885(VS.80).aspx

Вот еще один с тем же исключением, которое вы получили: http://forums.asp.net/p/322041/322460.aspx

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...