c# - EWS 托管 API : Can I load properties for multiple items with one EWS call, 仅给出项目 ID?

标签 c# exchangewebservices ews-managed-api

有谁知道如何使用 EWS 托管 API 在单个 EWS 调用中绑定(bind)到多个项目(仅给出相关项目的 ItemId)?

这是我的应用程序目前的工作方式:

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

问题是,处理每个项目并不需要很长时间,因此我的代码大约一半的时间都花在 Item.Bind() 上。它可能也不会让 Exchange 邮箱服务器感到非常高兴,因为它必须满足持续不断的微小查询。在我看来,“批量”请求、一次加载大约 100 个左右项目的属性会更有效。

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

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

有几个问题:

  1. 我错过了什么吗? EWS 托管 API 中是否确实有一个方法可以实现我正在寻找的功能?
  2. 如果没有,一旦我开始托管 API session ,有没有办法“搭载”原始 EWS SOAP 调用,而不必再次经历所有身份验证等困难?
  3. 我只是以某种惊人的方式做错了吗? :-)

最佳答案

ExchangeService.BindToItems这就是您正在寻找的。

关于c# - EWS 托管 API : Can I load properties for multiple items with one EWS call, 仅给出项目 ID?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27848170/

相关文章:

c# - 获取属性到抽象类

c# - 在 C# 中拆分 URL?

c# - 如何使用 EWS 托管 API 在 Exchange 2007 中获取项目 Web 客户端 ID

.net - 我们可以使用EWS托管API连接到Exchange 2016吗?

exchange-server - 使用保留 header 的 EWS 托管 API 转发电子邮件

c# - 为什么 default 不适用于双括号?

exchangewebservices - 访问被拒绝。检查凭据并重试 - 偶尔发生

office365 - 无法从 Outlook 2016 桌面版中的 Outlook 插件中的转发电子邮件的 EWS 获取附件

office365 - Office 365 EWS 不返回 X-BackendOverrideCookie

c# - 使用未赋值的局部变量 "delivered"