我試圖使用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)的怪癖?
你只需要非常小心地懸掛引用,特別是避免使用多點表示法。 –