2013-03-13 13 views
6

मैं एक्सचेंज वेब सेवाओं का उपयोग कर GetRoomLists को कॉल कर रहा हूं, हम एक्सचेंज 2010 चला रहे हैं। नीचे दिए गए कोड को कंसोल एप्लिकेशन के माध्यम से निष्पादित किया जा रहा है। कॉल "कोई त्रुटि नहीं" की XML प्रतिक्रिया के अनुसार सफल होता है, लेकिन कोई डेटा वापस नहीं किया जाता है। जब आप Outlook नियुक्ति के माध्यम से एक को जोड़ने का प्रयास करते हैं तो हमारे पास कई सौ कमरे सूचीबद्ध होते हैं, इसलिए यह सुनिश्चित न करें कि ऐसा क्यों होगा।GetRoomLists सफल हो जाते हैं लेकिन कोई डेटा नहीं

मैंने डिफ़ॉल्ट क्रेडेंशियल्स का उपयोग करके या क्रेडेंशियल्स में गुजरने के लिए ईडब्ल्यूएस डीएलएल संस्करण 1.2 और 2.0 दोनों का उपयोग करने का प्रयास किया है। मैंने मूल रूप से यह पोस्ट करने के बाद देखा कि प्रतिक्रिया हेडर का कहना है कि हम एक्सचेंज 2012 एसपी 2 का उपयोग कर रहे हैं, इसलिए मैंने एक्सचेंजवर्सन एनम वैल्यू का उपयोग करने के लिए अपना कोड अपडेट करने का प्रयास किया, लेकिन परिणाम में कोई बदलाव नहीं आया।

मैंने मेलबॉक्स पढ़ने के लिए इस एक्सचेंज सर्वर पर सफलतापूर्वक ईडब्ल्यूएस का उपयोग किया है, लेकिन पहले कभी भी कमरे नहीं।

सी #

 ExchangeService es = new ExchangeService(ExchangeVersion.Exchange2010); 
     es.TraceFlags = TraceFlags.EwsResponse | TraceFlags.EwsRequest; 
     es.TraceEnabled = true; 
     es.UseDefaultCredentials = true; 
     es.AutodiscoverUrl("[email protected]"); 
     //this collection is empty after processing 
     EmailAddressCollection eac = es.GetRoomLists(); 

वेब सेवा अनुरोध से एक्सएमएल ट्रेस/प्रतिसाद

<Trace Tag="EwsRequest" Tid="9" Time="2013-03-13 20:39:41Z" Version="14.03.0032.000"> 
    <?xml version="1.0" encoding="utf-8"?> 
    <soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:m="http://schemas.microsoft.com/exchange/services/2006/messages" xmlns:t="http://schemas.microsoft.com/exchange/services/2006/types" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> 
    <soap:Header> 
     <t:RequestServerVersion Version="Exchange2010" /> 
    </soap:Header> 
    <soap:Body> 
     <m:GetRoomLists /> 
    </soap:Body> 
    </soap:Envelope> 
</Trace> 

<Trace Tag="EwsResponse" Tid="9" Time="2013-03-13 20:39:41Z" Version="14.03.0032.000"> 
    <?xml version="1.0" encoding="utf-8"?> 
    <s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/"> 
    <s:Header> 
     <h:ServerVersionInfo MajorVersion="14" MinorVersion="2" MajorBuildNumber="328" MinorBuildNumber="9" Version="Exchange2010_SP2" xmlns:h="http://schemas.microsoft.com/exchange/services/2006/types" xmlns="http://schemas.microsoft.com/exchange/services/2006/types" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" /> 
    </s:Header> 
    <s:Body xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 
     <GetRoomListsResponse ResponseClass="Success" xmlns="http://schemas.microsoft.com/exchange/services/2006/messages"> 
     <ResponseCode>NoError</ResponseCode> 
     <m:RoomLists xmlns:m="http://schemas.microsoft.com/exchange/services/2006/messages" /> 
     </GetRoomListsResponse> 
    </s:Body> 
    </s:Envelope> 
</Trace> 

MSDN GetRoomLists पर प्रलेखन: http://msdn.microsoft.com/en-us/library/dd899416(v=exchg.140).aspx

+0

आप अलग अलग खातों का उपयोग करने की कोशिश की? शायद कॉलिंग पहचान में किसी भी कमरे की सूची देखने की अनुमति नहीं है? इस मामले में सर्वर केवल खाली सूची लौटाएगा, जैसा कि आपके ट्रेस में देखा गया है। http://msdn.microsoft.com/en-us/library/exchange/dd899416(v=exchg.140).aspx सर्वर पर कोई भी कमरा सूचियां न रखने के लिए सामान्य रूप से आपकी प्रतिक्रिया सूचीबद्ध करता है। –

+0

@RomanGruber - वास्तव में एक कमरा सूची वास्तव में क्या है, इस बारे में कुछ और पढ़ने के बाद, मैं कमरे की सूची के बिना आउटलुक के बदले कमरों की सूची कैसे प्राप्त कर सकता हूं? – Peter

उत्तर

9

खैर मैं कारण/समाधान मिल गया। भ्रम यह था कि GetRoomLists कमरे की एक सूची वापस नहीं करता है, बल्कि इसके बजाय कमरों की सूची की सूची, या "कक्ष सूची" का संग्रह। ये एक विशेष प्रकार की वितरण सूची है जिसमें कमरों की एक सूची है।

जैसा कि यहां बताया गया है, http://social.msdn.microsoft.com/Forums/en-US/exchangesvrdevelopment/thread/4ff04c60-48c2-4a69-ab75-2383e73bfde2, आपको या तो कमरे की सूचियां सेट करने की आवश्यकता है या आपको एडी पूछने की आवश्यकता है और msExchRecipientDisplayType विशेषता को कमरे को ट्रैक करने के लिए जांचें।

यह लिंक कैसे कमरे लौटने के लिए LDAP क्वेरी लिखने के लिए का एक उदाहरण दिखाता: http://social.msdn.microsoft.com/Forums/en-US/exchangesvrdevelopment/thread/e2d10953-a8f9-459c-8a0e-f10c2e568b26

कोड मैं खोजने कमरे के लिए एक साथ रखा:

private List<string> GetConfRooms(string filter) 
{ 
    List<string> sRooms = new List<string>(); 

    DirectoryEntry deDomain = System.DirectoryServices.ActiveDirectory.Domain.GetComputerDomain().GetDirectoryEntry(); 
    DirectorySearcher dsRooms = new DirectorySearcher(deDomain); 

    dsRooms.Filter = string.Format("(&(&(&(mailNickname={0}*)(objectcategory=person)(objectclass=user)(msExchRecipientDisplayType=7))))", filter); 

    dsRooms.PropertiesToLoad.Add("sn"); 
    dsRooms.PropertiesToLoad.Add("mail"); 

    foreach (SearchResult sr in dsRooms.FindAll()) 
    { 
     sRooms.Add(sr.Properties["mail"][0].ToString()); 
    } 

    return sRooms; 
} 
+0

क्या यह (एलडीएपी समाधान) आपके लिए काम करता था? – Igal

+0

@ user301639 - मेरे उत्तर में दूसरे लिंक से एलडीएपी क्वेरी एडी से कमरे वापस लाती है, ऐसा लगता है कि यह काम कर रहा है। – Peter

+0

मैं कोड के साथ खो गया, चरणों के आदेश के साथ कुछ डेडलॉक है, स्ट्रिंग roRootDSE = dsDirectorySearcher.SearchRoot.Path; DirectoryEntry deDirectoryEntry = new DirectoryEntry (roRootDSE); निर्देशिका खोजकर्ता dsDirectorySearcher = नई निर्देशिका खोजकर्ता (deDirectoryEntry); आपने इसे कैसे हल किया? धन्यवाद! – Igal

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