C# код работает из функции консоли, но не работает в SQL хранимая процедура CLR - PullRequest
2 голосов
/ 15 февраля 2020

ПОЖАЛУЙСТА, ПОМОГИТЕ !!! У меня есть код для получения данных из AD. Раньше это работало в SQL2014 / Visual Studio2013. Теперь мы переходим на SQL2016. Я протестировал код в консольном приложении, и он работал просто отлично. Он просто не работает, когда я создаю тот же код в SQL CLR Stored Pro c с использованием Visual Studio 2017.

Это код в консольном приложении:

        static void Main(string[] args)
        {
            DirectoryEntry ldapConnection;
            DirectorySearcher search;
            SearchResult result;
            DirectoryEntry ldapconnection = null;
            string szJDEID = "";
            string szErrorMessage = "";
            string szNetworkID = "xyz";

            //--- Create and return new LDAP connection with desired settings  
            ldapConnection = new DirectoryEntry("LDAP://DC.company.com:389", "userid", "password");
            ldapConnection.Path = "LDAP://DC=company,DC=com";
            ldapConnection.AuthenticationType = AuthenticationTypes.Secure;


            //--- create search object which operates on ldap connection object and set search object to only find the user specified  
            search = new DirectorySearcher(ldapconnection);
            search.Filter = "(&(samaccountname=" + szNetworkID.Trim() + ")(memberOf=CN=JDEdwards Users,OU=Mail Enabled Manual,OU=Groups,OU=Global,DC=company,DC=com))";

            result = search.FindOne();

            if (result != null)
            {
                //--- create an array of properties that we would like and add them to the search object  
                string[] requiredproperties = new string[] { "extensionattribute13" };

                foreach (string property in requiredproperties)
                    search.PropertiesToLoad.Add(property);

                result = search.FindOne();

                if (result != null)
                {
                    foreach (string property in requiredproperties)
                        foreach (object mycollection in result.Properties[property])
                            szJDEID = mycollection.ToString();
                }
            }
            else
            {
                szErrorMessage = "ERROR: This user does not belong to the JDEdwards Users AD Group. Please check with the IT Helpdesk team.";
            }
        }

Я получаю значение szJDEID, хранящееся в Extension Attribute13. Когда я помещаю один и тот же код в SQL CLR Stored Pro c, Logi c всегда возвращает значение szErrorMessage.

Чего мне не хватает?

Заранее спасибо.

1 Ответ

0 голосов
/ 19 февраля 2020

Наконец-то. Как вы правильно указали ранее, bindDn был неверным. Проблема в том, что мы перешли с одного D C на другой. Я использовал lip.exe, чтобы выяснить принципал - userid@domain.com. Кроме того, ldapConnection.Path больше не был нужен, поскольку он был некорректен с новым D C. Итак, наконец, это работает. Спасибо Клинт.

...