Управляемый API EWS: можно ли загрузить свойства нескольких элементов с помощью одного вызова EWS, учитывая только идентификаторы элементов?

Кто-нибудь знает способ привязки к нескольким элементам в одном вызове EWS с помощью управляемого API EWS с учетом только ItemId рассматриваемых элементов?

Вот как мое приложение работает на данный момент:

  • Вызовите ExchangeService.FindItems() несколько раз, чтобы создать потенциально очень большой список элементов (сотни тысяч и более).
  • Сохраните ItemId в базе данных (в виде строк).
  • Прочитайте каждый ItemId по очереди из базы данных, привяжите элемент с помощью Item.Bind() и обработайте его (детали обработки не важны).

Проблема в том, что обработка каждого элемента не занимает много времени, поэтому мой код проводит около половины своего времени в Item.Bind(). Вероятно, сервер почтовых ящиков Exchange тоже не очень доволен, поскольку ему приходится удовлетворять постоянный поток крошечных запросов. Мне кажется, что было бы намного эффективнее «группировать» запросы, загружая свойства, возможно, для 100 или около того элементов за раз.

Прямо сейчас, я уверен, вы спрашиваете — почему бы просто не пропустить базу данных и не вызывать ExchangeService.LoadPropertiesForItems() после каждого вызова FindItems()? Ну... есть определенная вероятность того, что эта штука будет остановлена ​​до того, как она закончит обработку всех элементов. Когда он снова запустится (возможно, через несколько часов или дней), он должен иметь возможность возобновить работу с того места, где он был остановлен. Код, использующий FindItems(), настолько нетривиален, что было бы полным кошмаром выяснить, как сохранить его состояние для последующего возобновления.

Я нашел Загрузка свойств для нескольких элементов одним вызовом веб-служб Exchange, в котором объясняется, что LoadPropertiesForItems() использует вызов EWS GetItem за сцены. Это принимает список ItemId, но эта функциональность, похоже, не предоставляется через управляемый API (LoadPropertiesForItems() требует список уже привязанных объектов Item, а не только ItemId).

Так что собственно несколько вопросов:

  1. Я что-то упускаю? Есть ли в управляемом API EWS метод, который делает то, что я ищу?
  2. Если нет, то после того, как я начну сеанс управляемого API, есть ли способ «прицепить» к нему необработанный вызов SOAP EWS без необходимости снова проходить всю аутентификацию и т. д., трудный путь?
  3. Я просто делаю это неправильно каким-то захватывающим образом? :-)

person Anodyne    schedule 08.01.2015    source источник


Ответы (1)


ExchangeService. BindToItems — это то, что вам нужно.

person Jason Johnston    schedule 08.01.2015
comment
Блин, как я это пропустил?! Спасибо. - person Anodyne; 09.01.2015