Exchange Web服务(托管API)与WebDav性能问题

时间:2010-07-22 20:24:25

标签: exchange-server webdav mapi exchange-server-2007 ews-managed-api

我是Exchange(2007)开发的新手,请耐心等待。 :-)。似乎有无数的Exchange开发技术 - 最新的Exchange Web服务 - 以及它与Managed API相关。我需要编写一个程序,可以 - 如有必要 - 在Exchange服务器上运行 - 扫描人们的邮箱,以清除符合各种标准的消息(与此讨论无关)。

我的理解是,大多数其他技术 - WebDav,MAPI,CDO - 现在都被弃用于Exchange 2007和Exchange 2010.因此,由于这是一个绿地应用程序,我决定使用Exchange Web服务托管API。

我担心每小时可以扫描的项目数量。由于它是基于Web服务的,因此涉及网络跃点。所以我想在与我通信的服务器上运行此实用程序。 我是否正确,我必须与“Hub”服务器通话?。我正在使用自动发现,无论哪个邮件服务器包含我正在扫描的实际邮件存储,它似乎都会解析为“集线器”服务器。

当拉下多个项目时 - 使用ExchangeService.FindItems并指定页面大小为500 - 我从工作站到中心服务器的吞吐量非常好。我能够在47秒内检索到22,000个邮件。这看似合理。 然而,事实证明,当以这种方式检索时,并非所有属性都“绑定”。某些属性(如ToRecipients和CcReipients)未填写。您必须(单独)显式绑定它们 - 通过调用

Item.Bind(Server, Item.Id)

这是对服务器的单独往返,这使吞吐量从大约460项/秒降低到每秒3项 - 这是行不通的。

所以 - 其他一些问题。有没有办法在调用FindItems期间强制将缺少的属性绑定?如果做不到,有没有办法一次绑定多个项?

最后,我是否正确选择Exchange Web Services来完成此类工作。我喜欢编程模型的简单性,如果(a)更复杂或(b)弃用,我不想转向其他技术。如果其他技术能够更好地完成这项工作,并且不会弃用,那么我会考虑在必要时使用它。您的意见和建议表示赞赏。

1 个答案:

答案 0 :(得分:1)

您可以使用该服务在一次调用服务器时为许多项加载许多属性 - 它专为您的问题而设计。很遗憾,Managed API文档仍然很薄。

results = folder.findItems ...(或者你正在进行的任何调用)

service.LoadPropertiesForItems(results, propertySet);

属性设置如下:

PropertySet s = new PropertySet(BasePropertySet.IdOnly, ItemSchema.Subject, customDefinitions);

如果要取回大量记录,请使用各种xSchema类加载要最小​​化负载的特定字段。