我试图使用RDO 5.14从Exchange Server 2010中导出我公司相当大的公用文件夹布局(文件夹数量为000)的内容。使用RDO/MAPI提取大型公用文件夹存储并获取E_MAPI_TOO_BIG
我遇到了很多人发现的问题,因为在某些时候,Exchange 2010提供了错误E_MAPI_TOO_BIG,因为我正在使用的用户已经违反了Exchange商店的限制documented here。
在许多情况下接受的解决方案是在不出现,让更多的项目的处理,但仍然不允许我在获得超过500个消息的同时调用while (Marshal.ReleaseComObject(ref)>0)
每个裁判和GC.Collect()
一次。
有些玩弄代码。它揭示了以下令人惊讶的事情(至少对我而言)的事实。
如果我遍历这样的文件夹中的项目是没有问题的:
for (int i = 1; i < items.Count; ++i) {
IRDOMail item = items.Item(i);
string SUCCESS = item.EntryID;
}
但是,如果我在某些时候使用此代码示例,它失败(在其他地方的代码试图访问其他文件夹)与E_MAPI_TOO_BIG:
for (int i = 1; i < items.Count; ++i) {
IRDOMail item = items.Item(i);
string FAIL = item.Subject;
}
在这一点上,我已经达到了我的COM技能的极限。它向我建议,在.NET InterOp中取消引用MailItem的COM属性的某些部分最终会抓取我无法发布的引用。如果是这种情况,我不知道我该如何修复它,如果有的话?
如果我在没有RDO的情况下使用MAPI,可以看到类似(但不同)的行为,进一步表明它是MAPI(14.0)的怪癖?
你只需要非常小心地悬挂引用,特别是避免使用多点表示法。 –