2015-12-01 1 views
0

Je suis développeur sur un système qui se connecte à des serveurs de messagerie externes à l'aide d'EWS. C'est la seule connexion directe que nous avons avec eux. Ils nous envoient occasionnellement un vidage CSV de leurs utilisateurs d'annuaire actifs afin que nous puissions le télécharger dans notre système. J'aimerais améliorer ce processus.Puis-je utiliser les services Web Exchange pour obtenir une liste de répertoires active?

Si je me connecte au portail OWA à l'aide des informations d'identification EWS, je peux voir tous les utilisateurs de l'entreprise sous Contacts, de sorte que l'information est présente et accessible sous une forme ou une autre.

Existe-t-il un moyen de générer moi-même ces données via la connexion EWS (par exemple, une requête LDAP)? et traiter leurs dossiers d'utilisateur de notre côté?

+0

Avez-vous vérifié ce lien - http://blogs.msdn.com/b/webdav_101/archive/2015/05/11/ews-authentication-issues.aspx voir aussi si vous Vous pouvez également utiliser 'PrincipalContext' avec EWS – MethodMan

+0

Si vous avez besoin de vidages AD, EWS ne le fera pas. Seuls les objets avec des attributs Exchange apparaissent correctement dans EWS. Configurez une connexion LDAPS sécurisée avec eux (la plupart des fournisseurs SaaS le font) et vous pouvez ensuite exécuter vos propres requêtes. Essayer de fenagler les données AD à partir de EWS ne fera que créer de la frustration ... – Chase

+0

Ce message similaire a une solution, je me demande si cela va marcher pour moi. http://stackoverflow.com/questions/20188197/how-to-get-all-contacts-in-exchange-web-service-not-just-the-first-few-hundreds Vous ferez un essai .. . – userSteve

Répondre

0

Cela dépend vraiment de la version d'Exchange que le client utilise et de la taille du carnet d'adresses. Sur Exchange 2010 EWS est limité dans ce qu'il peut faire du côté Adresse vous avez ResolveName https://msdn.microsoft.com/en-us/library/office/aa563518(v=exchg.150).aspx où vous pouvez obtenir un maximum de 100 entrées retournées à la fois, donc si vous faites une résolution sur "SMTP:" qui renverra les 100 premières entrées dans la liste d'adresses globale (donc si elle est inférieure à 100 cela fonctionnera bien) si son plus grand que 100 ne fonctionne pas très bien. Une solution de contournement consiste à placer toutes les entrées dans un groupe, puis à utiliser Expand Group pour obtenir toutes les adresses électroniques, puis à utiliser plusieurs ResolveNames pour obtenir les détails de contact.

En 2013, il est l'opération de FindPeople https://msdn.microsoft.com/en-us/library/office/jj191039%28v=exchg.150%29.aspx qui, si vous avez le carnet d'adresses Guid vous pouvez retourner toutes les entrées dans la liste d'adresses globale (Trouver des gens prennent en charge la pagination lorsque vous utilisez l'exemple)

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

S'ils utilisent Office365 puis l'API graphique une meilleure option.

Vive Glen