2013-03-13 4 views
6

Я звоню в GetRoomLists, используя Exchange Web Services, мы запускаем Exchange 2010. Нижеприведенный код выполняется через консольное приложение. Вызов успешно завершен в соответствии с ответом XML «No Error», но данные не возвращаются. У нас есть несколько сотен номеров, перечисленных при попытке добавить один через Outlook Appointment, поэтому не уверен, почему это произойдет.GetRoomLists успешно, но не возвращает данных

Я попытался использовать как EWS DLL версии 1.2, так и 2.0, используя учетные данные по умолчанию или передать учетные данные. Я заметил, что после первоначальной публикации этого заголовка ответа говорится, что мы используем Exchange 2012 SP2, поэтому я попробовал обновить свой код, чтобы использовать это значение перечисления ExchangeVersion, но никаких изменений в результате.

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

C#

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

XML Трассировка От запроса Web Service/Response

<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. Просто прочитав немного больше о том, что представляет собой список комнат, как я могу получить список комнат в обмен, например Outlook, без списка номеров? – Peter

ответ

9

Ну я нашел причину/решения. Путаница заключалась в том, что GetRoomLists не возвращает список комнат, а вместо этого список списка номеров или сборник «Списки номеров». Это особый тип списка рассылки, который содержит список комнат.

Как описано здесь, http://social.msdn.microsoft.com/Forums/en-US/exchangesvrdevelopment/thread/4ff04c60-48c2-4a69-ab75-2383e73bfde2, вам нужно либо настроить списки номеров, либо вам нужно запросить AD и проверить атрибут 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

Было ли это (решение LDAP) работать на вас? – Igal

+0

@ user301639 - Запрос LDAP из второй ссылки в моем ответе возвращает номера из AD, поэтому похоже, что он работает. – Peter

+0

Я потерялся с кодом, есть некоторый тупик с порядком шагов, Строка roRootDSE = dsDirectorySearcher.SearchRoot.Path; DirectoryEntry deDirectoryEntry = new DirectoryEntry (roRootDSE); DirectorySearcher dsDirectorySearcher = новый DirectorySearcher (deDirectoryEntry); Как вы его решили? спасибо! – Igal

Смежные вопросы