Как связать асинхронно с LdapConnection
При асинхронном запросе выполнения операций LDAP через BeginSendRequest
а также EndSendRequest
довольно просто, я не смог определить, как процесс привязки может выполняться асинхронно.
Есть ли возможность связать асинхронно с LdapConnection SDS.P
1 ответ
Искал асинхронные операции LDAP и нашел этот вопрос без ответа. В итоге сам разобрался:
Предполагая, что вы также хотите отправлять/получать запрос LDAP асинхронно после привязки (не знаю, зачем еще вам может понадобиться привязка), вы можете использовать свойство AutoBind в LdapConnection и заранее указать учетные данные в конструкторе для достижения «асинхронной привязки». , используя BeginSendRequest()/EndSendRequest() и позволяя ему обрабатывать Bind внутри, асинхронным образом.
using System.DirectoryServices.Protocols;
using System.Net;
using System.Threading.Tasks;
// ...
using (var connection =
new LdapConnection(
new LdapDirectoryIdentifier("fqdn.example.com", true, false),
new NetworkCredential("someuser", "somepassword"),
AuthType.Basic))
{
// The Answer...
connection.AutoBind = true;
var searchResult = await Task.Factory.FromAsync(
connection.BeginSendRequest,
connection.EndSendRequest,
new SearchRequest(
"DC=example,DC=com",
"(objectClass=user)",
SearchScope.Subtree,
"distinguishedname"),
PartialResultProcessing.NoPartialResultSupport,
null);
// Profit
}
Для краткости я поместил старые методы модели асинхронного программирования (APM) в LdapConnection в удобный метод-оболочку, предоставленный для асинхронного шаблона на основе задач (TAP), чтобы его можно было просто ожидать, как и ожидалось в современных проектах .Net. См.: https://docs.microsoft.com/en-us/dotnet/standard/asynchronous-programming-patterns/interop-with-other-asynchronous-patterns-and-types .
На самом деле не отвечает точно на вопрос, но показывает, что вам действительно не нужно явно привязываться самостоятельно, и, возможно, именно поэтому MS не удосужилась добавить BeginBind() и т. д. Надеюсь, это поможет следующему усталому программисту, борющемуся с взаимодействием LDAP кто сталкивается с этим.