Сервер Microsoft Exchange: это свойство было запрошено, но оно не было возвращено сервером (EWS)

#exchange-server #exchangewebservices

#exchange-сервер #обмен веб — сервисами #exchange-server #exchangewebservices

Вопрос:

Я пытаюсь получить значение веб-службы обмена свойствами bool «IsMeeting», используя C #. Я определяю следующие свойства в объекте PropertySet:

 PropertySet propertySet = new PropertySet(ItemSchema.Subject,
                                          AppointmentSchema.AppointmentState,
                                          AppointmentSchema.Start,
                                          AppointmentSchema.End,
                                          AppointmentSchema.Organizer,
                                          AppointmentSchema.IsMeeting,
                                          AppointmentSchema.IsCancelled,
                                          AppointmentSchema.IsRecurring,
                                          AppointmentSchema.IsAllDayEvent,
                                          AppointmentSchema.LegacyFreeBusyStatus,
                                          ItemSchema.LastModifiedTime,
                                          AppointmentSchema.TimeZone,
                                          AppointmentSchema.MeetingRequestWasSent,
                                          AppointmentSchema.ICalUid,
                                          ItemSchema.Id);
  

Однако при попытке получить свойства:

 foreach (Appointment a in appointments)
            {
               Console.WriteLine(a.IsMeeting.ToString());
            }
  

возникает исключение «ServiceObjectPropertyException». Это свойство было запрошено, но оно не было возвращено сервером.
Аналогичная проблема была и со свойством isCancelled. Помогло добавление свойства AppointmentState в PropertySet.
Со свойством IsMeeting нет идей решения. Я буду рад, если кто-нибудь сможет мне подсказать. Спасибо.

Ответ №1:

Из соображений производительности FindItems возвращает только подмножество свойств. Если вам действительно нужно это свойство, вам нужно выполнить дополнительный запрос GetItem (или Bind) для элемента. Если вы используете управляемый EWS API, вы можете сделать это с помощью LoadPropertiesForItems см. https://learn.microsoft.com/en-us/dotnet/api/microsoft.exchange.webservices.data.exchangeservice.loadpropertiesforitems?view=exchange-ews-apiamp;WT.mc_id=DOP-MVP-10145

Вы также должны иметь возможность просто использовать AppointmentState, который должен возвращать 0x0001 для собрания

Комментарии:

1. Глен Скейлс спасибо за ваш ответ. Я предполагаю, что я уже делаю такой запрос таким образом: appointments = CalendarFolder.Bind(service,targetFolder[i].Id,BasePropertySet.IdOnly).FindAppointments(cView); service.LoadPropertiesForItems(from Item item in appointments select item, propertySet); Если вам нужен дополнительный код, используемый мной для решения проблемы, я готов предоставить

2. Я попытался использовать свойство AppointmentState для получения атрибута собрания, но я получил аналогичную ошибку (

3. тогда что-то звучит неправильно, эти свойства вычисляются из базовых свойств собрания. Единственное, о чем я могу думать, это о плохо перенесенных данных, что происходит при вновь созданной встрече? это для пользователя или это комната собраний?

4. Я пытаюсь организовать собрания нескольких пользователей, подключившись к техническому почтовому ящику, у которого есть права на чтение, используя цикл. Я все еще не знаю, в чем была проблема. Могут возникнуть проблемы с сетью. После того, как я добавил счетчик повторных попыток и задержку повторных попыток после неудачных запросов, моя проблема была решена. Глен спасибо за вашу помощь.