Notificaciones de cambio en Servicios de dominio de Active Directory

Servicios de dominio de Active Directory proporcionar un mecanismo para que una aplicación cliente se registre con un controlador de dominio para recibir notificaciones de cambio. Para ello, el cliente especifica el control de notificación de cambios LDAP en una operación de búsqueda LDAP asincrónica. El cliente también especifica los siguientes parámetros de búsqueda.

Parámetro Descripción
Ámbito
Especifique LDAP_SCOPE_BASE para supervisar solo el objeto o LDAP_SCOPE_ONELEVEL para supervisar los elementos secundarios inmediatos del objeto, no incluido el propio objeto. No especifique LDAP_SCOPE_SUBTREE. Aunque se admite el ámbito del subárbol si el objeto base es la raíz de un contexto de nomenclatura, su uso puede afectar gravemente al rendimiento del servidor, ya que genera un mensaje de resultado de búsqueda LDAP cada vez que se modifica un objeto en el contexto de nomenclatura. No se puede especificar LDAP_SCOPE_SUBTREE para un subárbol arbitrario.
Filtrar
Especifique un filtro de búsqueda de "(objectclass=*)", lo que significa que recibe notificaciones de cambios en cualquier objeto del ámbito especificado.
Atributos
Especifique una lista de atributos que se devolverán cuando se produce un cambio. Tenga en cuenta que recibe notificaciones cuando se modifica cualquier atributo, no solo los atributos especificados.

Puede registrar hasta cinco solicitudes de notificación en una sola conexión LDAP. Debe tener un subproceso dedicado que espere las notificaciones y los procese rápidamente. Cuando se llama a la función ldap_search_ext para registrar una solicitud de notificación, la función devuelve un identificador de mensaje que identifica esa solicitud. A continuación, use la función ldap_result para esperar las notificaciones de cambio. Cuando se produce un cambio, el servidor le envía un mensaje LDAP que contiene el identificador de mensaje de la solicitud de notificación que generó la notificación. Esto hace que la función ldap_result devuelva con los resultados de búsqueda que identifican el objeto que cambió.

La aplicación cliente debe determinar el estado inicial del objeto supervisado. Para ello, primero debe registrar la solicitud de notificación y, a continuación, leer el estado actual.

La aplicación cliente también debe determinar la causa del cambio. Para una búsqueda de nivel base, se produce una notificación cuando cambia cualquier atributo o cuando se elimina o se mueve el objeto. Para una búsqueda de un nivel, se produce una notificación cuando se crea, elimina, mueve o modifica un objeto secundario. Tenga en cuenta que mover o cambiar el nombre de un objeto en la jerarquía por encima de un objeto de destino no genera una notificación aunque el nombre distintivo del destino haya cambiado como resultado. Por ejemplo, si supervisa los cambios en los objetos secundarios de un contenedor, no recibirá notificaciones si el propio contenedor se mueve o cambia de nombre.

Cuando el cliente procesa los resultados de búsqueda, puede usar la función ldap_get_dn para obtener el nombre distintivo del objeto que cambió. No confíe en nombres distintivos para identificar los objetos de los que se ha realizado el seguimiento, ya que los nombres distintivos pueden cambiar. En su lugar, incluya el atributo objectGUID en la lista de atributos que se van a recuperar. El objectGUID de cada objeto permanece sin cambios independientemente de dónde se mueva el objeto dentro del bosque de empresa.

Si se elimina un objeto dentro del ámbito de búsqueda, el cliente recibe una notificación de cambio y el atributo isDeleted del objeto se establece en TRUE. En este caso, los resultados de la búsqueda notifican el nuevo nombre distintivo del objeto en el contenedor Objetos eliminados de su partición. No es necesario especificar el control de marcador de exclusión (LDAP_SERVER_SHOW_DELETED_OID) para obtener notificaciones de eliminaciones de objetos. Para obtener más información, vea Recuperar objetos eliminados.

Cuando un cliente ha registrado una solicitud de notificación, el cliente continúa recibiendo notificaciones hasta que se interrumpe la conexión o el cliente abandona la búsqueda llamando a la función ldap_abandon. Si el cliente o el servidor se desconecta, por ejemplo, si se produce un error en el servidor, se finaliza la solicitud de notificación. Cuando el cliente se vuelve a conectar, debe registrarse de nuevo para recibir notificaciones y, a continuación, leer el estado actual de los objetos de interés en caso de que haya cambios mientras el cliente se desconecta.

El cliente puede usar el valor del atributo uSNChanged de un objeto para determinar si el estado actual del objeto en el servidor refleja los cambios más recientes que ha recibido el cliente. El sistema aumenta el atributo uSNChanged de un objeto cuando se mueve o modifica el objeto. Por ejemplo, si se produce un error en el servidor y la partición del directorio se restaura a partir de una copia de seguridad, es posible que la réplica del servidor de un objeto no refleje los cambios notificados anteriormente al cliente, en cuyo caso el valor uSNChanged en el servidor será inferior al valor almacenado por el cliente.

Para obtener más información y un ejemplo de código que usa el control de notificación de cambios LDAP en una operación de búsqueda LDAP asincrónica, vea Código de ejemplo para recibir notificaciones de cambio.

Para obtener más información sobre cuándo usar el control de notificación de cambios LDAP, vea Información general sobre las técnicas de Change Tracking.