GOOGLE ADS

вторник, 12 апреля 2022 г.

Время ожидания привязки LdapConnection

Есть ли способ установить тайм- аут привязки для соединения LDAP с помощью того System.DirectoryServices.Protocols.LdapConnection, что поставляется с.NET? Не путать с тайм -аутом соединения (это свойство Timeout ). По сути, мне нужно установить, LDAP_OPT_TIMELIMITкак описано здесь.

LdapSessionOptions кажется подходящим местом для этого, но, насколько я вижу, этой конкретной опции нет. Есть ли что-то еще, что мне не хватает?


Решение проблемы

Вот решение, которое я придумал:

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);
}

Это работает, но мне определенно не нравятся все эти отражения. Или DllImport, хотя библиотека.NET все равно использует это под прикрытием, поэтому я чувствую, что это не так уж важно.

Согласно приведенным ниже комментариям, здесь также полезно отметить, что из-за зависимости от Wldap32.dll, это может показаться только для Windows и не подходит для кроссплатформенности.

Комментариев нет:

Отправить комментарий

Laravel Datatable addColumn returns ID of one record only

Я пытаюсь использовать Yajra Datatable для интеграции DataTable на свой веб-сайт. Я смог отобразить таблицу, но столкнулся с проблемой. В по...