EWS调用可以并行完成而不会减慢速度吗?

时间:2012-06-04 09:53:38

标签: exchange-server exchangewebservices throttling policies

我想从Excachange Server(2010年通过EWS API)检索信息。详细地说,我想构建一个Windows服务来迭代所有excachange用户并使用非个性化来索引他们的私人邮箱。 这很好但但是当我一个接一个地使用这个用户时它非常慢(取决于邮箱量和用户的数量)。索引速度现在约为每分钟500件。

以下调用在我的测试系统上大约需要250毫秒:

PropertySet myPropertySet = new PropertySet(BasePropertySet.FirstClassProperties,    ItemSchema.ParentFolderId);
myPropertySet.RequestedBodyType = BodyType.Text;
myPropertySet.Add(entryIdExtendedProperty);
Item item = Item.Bind(es, itemKey, myPropertySet); 

所以我的想法是进行并行化。到目前为止,我尝试了3种方法:

  1. 后台工作者:每个用户一个工作线程。 结果:没有效果。似乎这样做会减慢通话速度。总之,总体速度保持不变。

  2. 单独的EXE流程:每个用户一个EXE。我创建了一个“Worker”-Exe并以用户作为参数调用它们:IndexWorker.exe -user1
    结果:结果相同!每个exe的调用都会减慢!

  3. 单独的Windows服务:每个用户一个服务。 结果:突然,请求没有减慢,这意味着我可以将整体速度提高到每分钟500个项目的倍数(我最多可以达到3个进程,即每分钟1500个项目)。不错,但我让我独自提出这个问题:

  4. 为什么EWS呼叫在1)和2)中减慢但在3)中没有减慢? 线程对我来说是最优雅的方式,我可以使用任何选项设置吗?

    我读了一些关于限制策略和EWSFindCountLimit的内容。这是正确的方向吗?

2 个答案:

答案 0 :(得分:0)

您的问题是限制政策。您需要为不限制EWS或RPC活动的服务帐户创建限制策略。

答案 1 :(得分:0)

您是否明白为什么单独的服务会让您的性能提升?限制是在服务帐户级别应用的,因此从您拨打电话的位置无关紧要。