【发布时间】:2013-09-22 04:48:31
【问题描述】:
手头的问题
我们的 C# Windows 应用程序使用 EWS Managed API 2.0 在用户的日历中创建约会。每个约会都有一个具有唯一值的扩展属性。它稍后会使用FindItems 和ItemView 定位约会。
用户在第一次执行此搜索时会遇到明显的延迟。随后的响应时间是完全可以接受的。
(“第一次”在这里有点模糊,因为用户可能会在当天晚些时候再次遇到延迟)
// locate ID of appointment where extended property value equals 1234:
var filter = new Ews.SearchFilter.IsEqualTo(extendedPropertyDefinition, 1234);
var view = new ItemView(1, 0);
view.PropertySet = BasePropertySet.IdOnly;
var folder = new FolderId(WellKnownFolderName.Calendar, new Mailbox("..."));
var result = service.FindItems(folder, filter, view);
远程服务器是 Exchange Server 2007 SP1。
研究
MSDN ties some comments to search folders and restricted views,但是我不确定这些是否适用于我们的情况。
将视图应用于文件夹的行为会在 商店。创建搜索文件夹时,会对其进行缓存以供以后使用。如果 用户尝试创建一个已经存在的搜索文件夹, 使用缓存的搜索文件夹。这使得未来的观看是公平的 快的。默认情况下,Exchange 不会缓存所有搜索文件夹 无限期。
同样重要的是要意识到第一次 发出 Exchange 存储搜索查询,它将运行非常缓慢并且 可能超时,而在未来的运行中它会响应 问题。这是由 Exchange 上发生的后端进程引起的 执行商店搜索时的服务器。
他们建议为不变的、非动态的查询创建搜索文件夹,这似乎不适合我们的案例,因为每个约会的查询都不同。
如果应用程序需要具有固定集合的特定查询 不变的参数,您可以使用搜索文件夹。 [...] 搜索 文件夹仅对不变的、非动态的查询有用。
本质上,我们需要的是在属性上创建一个“索引”(用数据库术语来说),确保在这个特定属性上的所有搜索都是快速的,无论时间或频率如何。
是否可以“索引”此属性?可以对客户端或服务器端进行任何配置以消除此初始延迟吗?
【问题讨论】:
-
你有没有得到任何地方?我正在研究同样的问题,我发现的唯一解决方案是创建一个隐藏的日历副本,我可以在其中存储按文件夹排序的项目,以加快搜索速度。
-
不,似乎没有立即解决此问题的方法。我们已经考虑构建一个服务,该服务使用
SyncFolderItems在 SQL Server 数据库中维护所有日历项目的副本。不过,我们还没有继续前进,我仍然希望有一个更简单的解决方案浮出水面。 -
嗨@mbjdev - 我知道这已经2岁了:但你知道这里是否有throttling involved吗?还是确定问题与索引有关?
-
文章指出,限制会影响“与 Exchange 服务器的所有客户端连接,包括 Office Outlook、Outlook Web App 和 Exchange ActiveSync 使用的协议。”与 Outlook 或其他客户端有任何问题,我们只在查询日历时专门看到了问题,所以我不会怀疑节流。我不再参与这个项目,所以我不能肯定。
标签: c# exchangewebservices exchange-server-2007 extended-properties