¿Hay alguna manera de establecer el tiempo de espera de vinculación en una conexión LDAP usando System.DirectoryServices.Protocols.LdapConnection que viene con .NET? No debe confundirse con el tiempo de espera de la conexión (que es la propiedad Timeout ). Esencialmente, necesito configurar LDAP_OPT_TIMELIMIT como se describe aquí .
LdapSessionOptions parece ser el lugar para eso, pero por lo que puedo ver, esta opción en particular no está presente. ¿Hay algo más que me estoy perdiendo?
Aquí está la solución que se me ocurrió:
private const int LDAP_OPT_TIMELIMIT = 0x04; [DllImport("Wldap32.dll", CallingConvention = CallingConvention.Cdecl, EntryPoint = "ldap_set_optionW", CharSet = CharSet.Unicode)] private static extern int ldap_set_option([In] IntPtr handle, [In] int option, [In] ref int inValue); private static void SetLdapConnectionBindTimeout(LdapConnection conn, int timeoutSeconds) { // We need the underlying LdapConnection handle; that's internal, so reflection here we go. var handleField = typeof(LdapConnection).GetField("ldapHandle", BindingFlags.NonPublic | BindingFlags.Instance); var handleWrapper = handleField.GetValue(conn); // That handle object is itself a wrapper class around the IntPtr we actually need. // The wrapper class is internal, and so is the IntPtr, so more reflection. var internalHandleField = handleWrapper.GetType().GetField("handle", BindingFlags.NonPublic | BindingFlags.Instance); var internalHandle = (IntPtr)internalHandleField.GetValue(handleWrapper); // Now we can set. ldap_set_option(internalHandle, LDAP_OPT_TIMELIMIT, ref timeoutSeconds); } Esto funciona, pero ciertamente no me encanta toda esa reflexión. O el DllImport , aunque la biblioteca .NET lo usa de todos modos, así que siento que no es tan importante.
Según los comentarios a continuación, también es bueno tener en cuenta aquí que, debido a la dependencia de Wldap32.dll , parece ser solo para Windows y no apto para varias plataformas.