Outlook获取FreeBusy信息很慢

时间:2019-02-10 08:20:28

标签: c# outlook office-interop

我的代码是MS Outlook插件,用于为60多个团队创建缺勤日历。该公司使用MS Exchange。

我正在使用以下代码检索他们的忙/闲状态:

var namespace = ThisAddIn.thisOutlookApp?.GetNamespace( "MAPI" );
var recp = namespace.CreateRecipient( personName );
var freeBusy = recp.FreeBusy( startDate, MinPerChar: 60, CompleteFormat: true );

尽管此文件有效,但一次调用FreeBusy()大约需要300毫秒。对于60个人而言,时间跨度为三个月,这意味着我的代码将花费近一分钟。

我也尝试了这种替代方法:

recp.Resolve();
var exu = recp.AddressEntry.GetExchangeUser();
var freeBusy = exu.GetFReeBusy(...)

但没有区别。 VBA中的相同代码显示相同的性能。

加快通话速度是他们的窍门,还是获取闲/忙信息的另一种方法,例如通过访问其他人的日历或与MS Exchange服务器本身进行对话?

2 个答案:

答案 0 :(得分:1)

使用GetUserAvailability EWS操作-允许在单个呼叫中为多个用户请求f / b信息。

答案 1 :(得分:0)

我自己找到了一个很好的解决方案: 我没有使用Outlook Interop API,而是使用EWS托管API调用Exchange服务器本身。

101 sample projects有一套出色的工具。 (实际上是101个示例!)以及一个很好的step-by-step tutorial入门EWS托管API。

“ Exchange 2013以编程方式获取用户的状态设置”是我使用的示例。

但是,我很想听听SO用户的替代解决方案。