Exchange 2016环境下EWS FindItems仅返回250项问题咨询
EWS FindItems() 对存档邮箱AQS查询仅返回250条结果的原因
- 该限制是Exchange 2016本地环境的内置搜索约束,和你设置的
pageSize参数、EWS节流策略均无关联。当调用FindItems方法时传入AQS查询字符串(即使用ItemView的QueryString属性传参)检索存档邮箱内的项,Exchange搜索组件对存档存储的查询默认硬截断250条结果,即使你将pageSize设置为500、1000,单请求最多也只会返回250条匹配项。 - 不需要修改或禁用EWS节流策略。节流策略触发时会直接返回
ErrorServerBusy/HTTP 503类错误响应,不会正常返回部分结果后静默截断,调整节流参数无法解决该问题。
解决方案
- 分页拉取全量结果:将单请求pageSize设置为250,通过返回结果的
MoreAvailable属性判断是否存在剩余数据,每次请求更新偏移量循环拉取,直到拉取完所有符合条件的项。参考实现代码如下:
// 单请求大小直接设为250,匹配存档邮箱AQS查询的内置上限 ItemView itemView = new ItemView(250); FindItemsResults<Item> currentBatch; do { currentBatch = targetArchiveFolder.FindItems(yourAqsQuery, itemView); // 处理当前批次的项 foreach (Item mailItem in currentBatch.Items) { // 自定义业务处理逻辑 } // 更新偏移量拉取下一批 itemView.Offset += currentBatch.Items.Count; } while (currentBatch.MoreAvailable);
- 如果希望减少分页请求次数,可以放弃AQS查询语法,改用EWS原生的
SearchFilter组合构建查询条件。使用SearchFilter查询时,存档邮箱的单请求返回上限会遵循你设置的pageSize参数(最高不超过EWS虚拟目录配置的MaxReturnedItemsPerCall值,Exchange 2016默认值为1000)。 - 不要尝试通过修改服务器注册表、直接编辑Exchange搜索组件配置的方式强行调高250条的内置上限,这类操作不在微软官方支持范围内,可能引发存档邮箱索引损坏、搜索服务崩溃等问题。
内容的提问来源于stack exchange,提问作者Hiren Patel
相关产品推荐
相关产品推荐

