Уведомления об изменениях в службах домен Active Directory

службы домен Active Directory предоставляют механизм регистрации клиентского приложения в контроллере домена для получения уведомлений об изменениях. Для этого клиент задает элемент управления уведомления об изменении LDAP в асинхронной операции поиска LDAP. Клиент также задает следующие параметры поиска.

Параметр Описание
Область действия
Укажите либо LDAP_SCOPE_BASE для мониторинга только объекта, либо LDAP_SCOPE_ONELEVEL для отслеживания непосредственных дочерних элементов объекта, не включая сам объект. Не указывайте LDAP_SCOPE_SUBTREE. Хотя поддерев область поддерживается, если базовый объект является корнем контекста именования, его использование может серьезно повлиять на производительность сервера, так как оно создает сообщение результата поиска LDAP каждый раз при изменении объекта в контексте именования. Невозможно указать LDAP_SCOPE_SUBTREE для произвольного поддеревого дерева.
Фильтр
Укажите фильтр поиска "(objectclass=*)", что означает, что вы получаете уведомления об изменениях любого объекта в указанном область.
Атрибуты
Укажите список атрибутов, возвращаемых при изменении. Помните, что вы получаете уведомления при изменении любого атрибута, а не только указанных атрибутов.

Вы можете зарегистрировать до пяти запросов уведомлений в одном подключении LDAP. У вас должен быть выделенный поток, который ожидает уведомлений и обрабатывает их быстро. При вызове функции ldap_search_ext для регистрации запроса на уведомление функция возвращает идентификатор сообщения, который идентифицирует этот запрос. Затем вы используете функцию ldap_result для ожидания уведомлений об изменениях. При изменении сервер отправляет сообщение LDAP, содержащее идентификатор сообщения для запроса уведомления, создающего уведомление. Это приводит к возврату функции ldap_result с результатами поиска, определяющими измененный объект.

Клиентское приложение должно определить начальное состояние отслеживаемого объекта. Для этого необходимо сначала зарегистрировать запрос на уведомление, а затем прочитать текущее состояние.

Клиентское приложение также должно определить причину изменения. При поиске базового уровня уведомление возникает при изменении любого атрибута или при удалении или перемещении объекта. Для одноуровневого поиска уведомление возникает при создании, удалении, перемещении или изменении дочернего объекта. Помните, что перемещение или переименование объекта в иерархии над целевым объектом не создает уведомление, даже если в результате изменено различающееся имя целевого объекта. Например, если мониторинг изменяется на дочерние объекты в контейнере, вы не получите уведомления, если сам контейнер перемещен или переименован.

При обработке результатов поиска клиент может использовать функцию ldap_get_dn для получения различающегося имени измененного объекта. Не полагаться на различающиеся имена для идентификации отслеживаемых объектов, так как различающиеся имена могут изменяться. Вместо этого добавьте атрибут objectGUID в список атрибутов для извлечения. Объект objectGUID каждого объекта остается неизменным независимо от того, где объект перемещается в лесу предприятия.

Если объект в область поиска удаляется, клиент получает уведомление об изменении и атрибут isDeleted объекта имеет значение TRUE. В этом случае результаты поиска сообщают о новом различаемом имени объекта в контейнере удаленных объектов его секции. Для получения уведомлений об удалении объектов не требуется указывать элемент управления tombstone (LDAP_SERVER_SHOW_DELETED_OID). Дополнительные сведения см. в разделе "Извлечение удаленных объектов".

Когда клиент зарегистрировал запрос на уведомление, клиент продолжает получать уведомления до тех пор, пока подключение не будет нарушено или клиент отказывается от поиска, вызвав функцию ldap_abandon. Если клиент или сервер отключены, например, если сервер завершает работу, запрос уведомления завершается. При повторном подключении клиента он должен снова зарегистрировать уведомления, а затем прочитать текущее состояние объектов, интересующих вас, если произошли изменения во время отключения клиента.

Клиент может использовать значение атрибута uSNChanged объекта, чтобы определить, отражает ли текущее состояние объекта на сервере последние изменения, полученные клиентом. Система увеличивает атрибут uSNChanged объекта при перемещении или изменении объекта. Например, если сервер завершается сбоем и раздел каталога восстанавливается из резервной копии, реплика объекта сервера могут не отражать ранее сообщаемые клиенту изменения, в этом случае значение uSNChanged на сервере будет ниже значения, хранящегося клиентом.

Дополнительные сведения и пример кода, использующего элемент управления уведомления об изменении LDAP в асинхронной операции поиска LDAP, см. в примере кода для получения уведомлений об изменениях.

Дополнительные сведения об использовании элемента управления уведомления об изменении LDAP см. в разделе "Общие сведения о методах Отслеживание изменений".