Могу ли я использовать веб-службы Exchange для получения списка активных каталогов?

Я разработчик системы, которая подключается к внешним почтовым серверам клиентов с помощью EWS. Это единственная прямая связь, которую мы имеем с ними.

Они также время от времени присылают нам CSV-дамп своих пользователей Active Directory, чтобы мы могли загрузить его в нашу систему. Я хотел бы улучшить этот процесс.

Если я войду на портал OWA, используя учетные данные EWS, я увижу всех их корпоративных пользователей в разделе «Контакты», поэтому информация есть и доступна в той или иной форме.

Можно ли самостоятельно получить эти данные через соединение EWS (например, в виде запроса LDAP)? и обрабатывать их пользовательские записи с нашей стороны?


person userSteve    schedule 01.12.2015    source источник
comment
вы проверили эту ссылку - блоги .msdn.com/b/webdav_101/archive/2015/05/11/ также узнайте, можете ли вы использовать PrincipalContext с EWS.   -  person MethodMan    schedule 02.12.2015
comment
Если вам нужны дампы AD, EWS этого не сделает. Только объекты с атрибутами Exchange правильно отображаются в EWS. Настройте с ними безопасное соединение LDAPS (большинство поставщиков SaaS делают это), а затем вы сможете выполнять свои собственные запросы. Попытка обмануть данные AD из EWS только вызовет разочарование...   -  person Chase    schedule 02.12.2015
comment
В этом похожем посте есть решение, интересно, сработает ли оно для меня. stackoverflow.com/questions/20188197/ Попробую...   -  person userSteve    schedule 03.12.2015


Ответы (1)


На самом деле это зависит от версии Exchange, которую использует клиент, и размера адресной книги. В Exchange 2010 EWS ограничен в том, что он может делать на стороне адреса, у вас есть ResolveName https://msdn.microsoft.com/en-us/library/office/aa563518(v=exchg.150).aspx, где вы можете получить максимум 100 записей. за раз, поэтому, если вы выполните разрешение на «SMTP:», это вернет первые 100 записей в глобальном списке адресов (поэтому, если их меньше 100, он будет работать нормально), если их больше 100, это не работает так хорошо. Один из обходных путей — поместить все записи в группу, а затем использовать Expand Group, чтобы получить все адреса электронной почты, а затем использовать несколько ResolveNames, чтобы получить контактные данные.

В 2013 году есть операция FindPeople https://msdn.microsoft.com/en-us/library/office/jj191039%28v=exchg.150%29.aspx, который, если у вас есть Guid адресной книги, вы можете вернуть все записи в GAL (найти Люди поддерживают пейджинг при использовании, например)

FindPeopleType fpType = new FindPeopleType();  
IndexedPageViewType indexPageView = new IndexedPageViewType();  
indexPageView.BasePoint = IndexBasePointType.Beginning;  
indexPageView.Offset = 0;  
indexPageView.MaxEntriesReturned = 100;  
indexPageView.MaxEntriesReturnedSpecified = true;  
fpType.IndexedPageItemView = indexPageView;  


fpType.ParentFolderId = new TargetFolderIdType();  
DistinguishedFolderIdType contactsFolder = new DistinguishedFolderIdType();  
AddressListIdType adList = new AddressListIdType();  
adList.Id = "2117949e-abe8-4915-91eb-6b9f867fd8de";  

fpType.ParentFolderId.Item = adList;  
FindPeopleResponseMessageType fpm = null;  
do  
{  
    fpm = esb.FindPeople(fpType);  
    if (fpm.ResponseClass == ResponseClassType.Success)  
    {  
        foreach (PersonaType PsCnt in fpm.People) {  
            Console.WriteLine(PsCnt.EmailAddress.EmailAddress);  
        }  
        indexPageView.Offset += fpm.People.Length;                      
    }  
    else {  
        throw new Exception("Error");  
    }  
} while (fpm.TotalNumberOfPeopleInView > indexPageView.Offset);  

Если они используют Office365, лучше использовать Graph API.

Ура Глен

person Glen Scales    schedule 02.12.2015