2010-01-15 19 views
14

Herkes bana Exchange Server'dan bir kişi listesi almanın en kolay yolunu söyleyebilir mi? Ben C#Exchange Server'dan kişi listesi nasıl alınır?

kullanıyorum. Exchange Web Services yalnızca Exchange Server 2007 ve ötesindeki için bulunduğumdan. Bu benim ilk seçeneğim olurdu, ancak Exchange'in önceki sürümleri için de bir alternatif istiyorum (WebDav veya bir şey). Dizin Hizmetleri bir seçenek değildir.

+0

EWS Managed API (.Net 3.5 pre-req) bir seçenek midir? –

+0

Alfred, biraz araştırıyordum ve sürümüne bağlı olarak Exchange'e bağlanmanın farklı yolları olduğundan, bu artık beklemede. Ancak ilk seçeneğim, EWS Managed API, evet. Teşekkürler! – Johnny

+0

Exchange'in önceki sürümleri için yaptığım şey, listeleri aktif dizinden almaktır. –

cevap

11

EWS kullanılarak iletişim listesinden kişi listenizden kişi listesi nasıl edinilir. Henüz global listeden kişileri nasıl alacağımı bilmiyorum, sadece bir saat önce API'ye baktım.

private static void ListContacts(ExchangeService svc) { 
    foreach (var v in svc.FindItems(WellKnownFolderName.Contacts, 
            new ItemView(20))) { 
     Contact contact = v as Contact; 
     ContactGroup contactGroup = v as ContactGroup; 

     //v.Load(); // Turns out you don't need to load for basic props. 
     if (contact != null) { 
      Console.WriteLine("Contact: {0} <{1}>", 
       contact.DisplayName, 
       contact.EmailAddresses[EmailAddressKey.EmailAddress1]); 
     } else if (contactGroup != null) { 
      Console.WriteLine("Contact Group: {0}", contactGroup.DisplayName); 
      switch (svc.RequestedServerVersion) { 
       case ExchangeVersion.Exchange2007_SP1: 
        ExpandGroupResults groupResults 
         = svc.ExpandGroup((contactGroup.Id)); 
        foreach (var member in groupResults) { 
         Console.WriteLine("+ {0} <{1}>", 
          member.Name, member.Address); 
        } 
        break; 
       case ExchangeVersion.Exchange2010: 
        foreach (GroupMember member in contactGroup.Members) { 
         Console.WriteLine("+ {0} <{1}>", 
         member.AddressInformation.Name, 
         member.AddressInformation.Address); 
        } 
        break; 
       default: 
        Console.WriteLine(
         "** Unknown Server Version: {0}", 
         svc.RequestedServerVersion); 
        break; 
      } 
     } else { 
      Console.WriteLine("Unknown contact type: {0} - {1}", 
       contact.GetType(), v.Subject); 
     } 
    } 
} 

Ben verbocity için hizmeti oluşturarak ommited ettik, daha fazla bilgi için Exchange Web Services API de bakabilirsiniz.

+0

Yönetilen API ile yüklenen GettingStarted.doc dosyasının aslında oldukça servis referansını ayarlamak için yardımcı –

1

Her şeyden önce, Microsoft Exchange Web Hizmetleri Kitaplığı'na bir başvuru eklemeyi unutmayın.

... ve Brett Ryan zaten yerel kişi listesi almak için kodu sağladı.

Genel iletişim listesinin (en azından bunlardan en azından biri) alınmasına ilişkin bu yöntemle ilgili sorun, "ResolveName" işlevinin 100 kişiye geri dönmesidir, böylece kuruluşunuzun bundan daha fazla kaydı varsa, başı dertte olmak. Olası bir geçici çözüm (ve uygulayabildiğim), her harf için ayrı bir arama yapmaktır (bu tür bir aramanın her zaman 100 sonuçtan daha azını döndüreceğini doğrulayabileceğinizi varsayarak) ve tüm benzersiz girdileri tek bir listeye dizer.

İlgili konular