EWS托管API:我是否可以通过一个EWS调用加载多个项目的属性,只给出项目ID?

时间:2015-01-08 19:35:16

标签: c# exchangewebservices ews-managed-api

是否有人知道使用EWS托管API绑定到单个EWS调用中的多个项目的任何方法,只给出相关项目的ItemIds?

以下是我的申请目前的工作方式:

  • 重复调用ExchangeService.FindItems()以生成可能非常大的项目列表(数十万或更多)。
  • 将ItemIds存储在数据库中(作为字符串)。
  • 从数据库中依次读取每个ItemId,使用Item.Bind()绑定到项目并处理它(处理的细节不重要)。

麻烦的是,处理每个项目并不需要很长时间,因此我的代码在Item.Bind()中花费了大约一半的时间。它可能也不会让Exchange邮箱服务器非常高兴,不得不满足一连串微小的查询。在我看来,"批量生产将会更有效率。请求,一次加载大约100件物品的属性。

现在,我确定你要问 - 为什么不跳过数据库并在每次FindItems()调用后调用ExchangeService.LoadPropertiesForItems()?嗯......在它完成所有项目的处理之前,这个东西肯定会被停止。当它再次启动时(可能是几小时或几天后),它需要能够从停止的位置恢复。使用FindItems()的代码是非常重要的,以至于要弄清楚如何保存其状态以便以后恢复将是一场彻头彻尾的噩梦。

我找到Loading Properties for Multiple Items with One Call to Exchange Web Services,这解释了LoadPropertiesForItems()在幕后使用EWS GetItem调用。这确实接受了ItemIds列表,但该功能似乎没有通过托管API公开(LoadPropertiesForItems()需要一个已绑定的Item对象列表,而不仅仅是ItemIds。)

真的有几个问题:

  1. 我错过了什么吗?在EWS托管API中是否有某种方法能够实现我所寻找的目标?
  2. 如果没有,一旦我有一个管理的API会话,有没有办法去"捎带"一个原始的EWS SOAP调用,而不必再次通过所有的身份验证等,这很难吗?
  3. 我只是以一种惊人的方式做错了吗? : - )

1 个答案:

答案 0 :(得分:2)

ExchangeService.BindToItems是您正在寻找的。