2010-01-15 12 views
14

क्या कोई मुझे एक्सचेंज सर्वर से संपर्क सूची प्राप्त करने का सबसे आसान तरीका बता सकता है? मैं सी #एक्सचेंज सर्वर से संपर्क सूची कैसे प्राप्त करें?

जो मैंने पाया, उससे एक्सचेंज वेब सेवा केवल एक्सचेंज सर्वर 2007 और उसके बाद के लिए मौजूद है। यह मेरा पहला विकल्प होगा, लेकिन मुझे एक्सचेंज (वेबडाव या कुछ) के पिछले संस्करणों के लिए एक विकल्प भी पसंद आएगा। निर्देशिका सेवाएं एक विकल्प नहीं है।

+0

क्या EWS प्रबंधित API (.NET 3.5 प्री-रिक) एक विकल्प है? –

+0

अल्फ्रेड, मैं थोड़ा जांच कर रहा हूं, और चूंकि संस्करण के आधार पर एक्सचेंज से कनेक्ट करने के विभिन्न तरीके हैं, यह अब पकड़ पर है। लेकिन, मेरा पहला विकल्प ईडब्ल्यूएस प्रबंधित एपीआई होगा, हां। धन्यवाद! – Johnny

+0

एक्सचेंज के पूर्व संस्करणों के लिए मैं जो कर रहा हूं वह सक्रिय-निर्देशिका से सूचियों को आसानी से पुनर्प्राप्त कर रहा है। –

उत्तर

11

ईडब्ल्यूएस का उपयोग करके बदले में अपनी संपर्क सूची से संपर्क सूची कैसे प्राप्त करें। मुझे यकीन नहीं है कि वैश्विक सूची से संपर्क कैसे प्राप्त करें, केवल एक घंटा पहले ही एपीआई को देखा।

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

मैं verbocity के लिए सेवा बनाने ommited किया है, अधिक जानकारी के लिए Exchange Web Services API पर एक नजर है।

+0

मुझे पता चला कि प्रबंधित API के साथ स्थापित हो रही GetStarted.doc वास्तव में काफी है सेवा संदर्भ स्थापित करने के लिए सहायक –

1

सबसे पहले, माइक्रोसॉफ्ट एक्सचेंज वेबसाइट्स लाइब्रेरी का संदर्भ जोड़ने के लिए मत भूलना।

private static void ConnectToExchangeService() 
{ 
    service = new ExchangeService(); 
    service.Credentials = new WebCredentials(USERNAME, PASSWORD, DOMAIN_NAME); 
    service.AutodiscoverUrl(USER_ADDRESS); 
} 

private static void ListGlobalContacts(ExchangeService service) 
{ 
    /* passing true as the third parameter to "ResolveName" is important to 
     make sure you get the contact details as well as the mailbox details */ 
    NameResolutionCollection searchResult = service.ResolveName(NAME_YOURE_LOOKING_FOR, ResolveNameSearchLocation.DirectoryOnly, true); 
    foreach (NameResolution resolution in searchResult) 
    { 
     Console.WriteLine("name is " + resolution.Contact.DisplayName); 
     Console.WriteLine("address is " + resolution.Mailbox.Address); 
     Console.WriteLine("business phone is " + resolution.Contact.PhoneNumbers[PhoneNumberKey.BusinessPhone]); 
     Console.WriteLine("mobile phone is " + resolution.Contact.PhoneNumbers[PhoneNumberKey.MobilePhone]); 
    } 
} 

... और ब्रेट रयान ने स्थानीय संपर्क सूची प्राप्त करने के लिए पहले ही कोड प्रदान किया है।

वैश्विक संपर्क सूची (ठीक है, उनमें से एक कम से कम) को पुनर्प्राप्त करने की इस विधि के साथ समस्या यह है कि फ़ंक्शन "ResolveName" 100 संपर्कों तक पहुंचता है ताकि यदि आपके संगठन के पास उससे अधिक रिकॉर्ड हैं, तो आप मुसीबत में। एक संभावित कामकाज (और जिसे मैंने कार्यान्वित किया) प्रत्येक पत्र के लिए एक अलग खोज आयोजित करना है (मान लीजिए कि आप यह सत्यापित कर सकते हैं कि ऐसी खोज हमेशा 100 से कम परिणाम लौटाएगी) और सभी अनन्य प्रविष्टियों को एक सूची में एक साथ स्ट्रिंग करेगी।

संबंधित मुद्दे