2016-04-12 11 views
0

gefunden Ich versuche, Kontakte in der Mailbox eines Benutzers programmgesteuert (mithilfe von Erlösung) basierend auf Werten aus einer Datenbank zu erstellen.Verwenden von Redemption RDOContactItem kann nicht mehr als eine Anzahl von Kontakten speichern MAPI_E_TOO_BIG

RDOContactItem rci = (RDOContactItem)session.GetDefaultFolder(rdoDefaultFolders.olFolderContacts).Folders["Contacts Subfolder"].Items.Add("IPM.Contact"); 
... 
rci.Save(); 

Sobald ich die Grenze 250, erreichen erhalte ich die Fehlermeldung:

Error in IMsgStore::OpenEntry(Inbox or Root): MAPI_E_TOO_BIG 
ulVersion: 0 
Error: Your server administrator has limited the number of items you can open simultaneously. Try closing messages you have opened or removing attachments and images from unsent messages you are composing. 
Component: Microsoft Exchange Information Store 

lesen Dmitry Streblechenko Kommentare zu „Das ist ein Hinweis darauf, dass Sie zu viele offene Objekte haben Haben Sie jeder öffnen. und jede Nachricht in einem Ordner? " Vorschläge auf http://www.microsoft-questions.com/microsoft/Plaform-SDK-Mapi/32731171/mapietoobig.aspx und versuchte sogar seinen Vorschlag "Lösen Sie alle Exchange-Objekte, sobald Sie mit ihnen fertig sind?"

if (rci != null) Marshal.ReleaseComObject(rci); 

Gießen sogar in der Lage zu IDisposable zu entsorgen, aber es hat nicht funktioniert.

Ich habe keine Möglichkeit gefunden, ein Kontaktelement nach dem Speichern zu schließen.

Das Erhöhen der Anzahl der Elemente, die gleichzeitig auf der Serverseite geöffnet werden können, ist ebenfalls keine gute Wahl.

Wie löst man das?

Antwort

1

Sie verwenden die Mehrfachpunktnotation (5, wenn ich richtig zähle), und das verursacht, dass der Compiler implizite Variablen erstellt, die Sie nicht explizit freigeben können. Versuche Folgendes. Sie können auch versuchen GC.Collect() jeder einmal in eine Weile zu nennen, würde aber eine Vorschlaghammer einer Lösung sein ...

RDOFolder contacts = session.GetDefaultFolder(rdoDefaultFolders.olFolderContacts); 
RDOFolders folders = contacts.Folders; 
RDOFolder subfolder = folders["Contacts Subfolder"]; 
RDOItems items = subfolder.Items; 
RDOMail msg = items.Add("IPM.Contact"); 
RDOContactItem rci = (RDOContactItem)msg; 
... 
rci.Save(); 
Marshal.ReleaseComObject(rci); 
Marshal.ReleaseComObject(msg); 
Marshal.ReleaseComObject(items); 
Marshal.ReleaseComObject(subfolder); 
Marshal.ReleaseComObject(folders); 
Marshal.ReleaseComObject(contacts); 
+1

WOW, es ist eine große Ehre, die perfekte Lösung aus der Rücknahme des Erstellers zu erhalten. Danke, Herr Streblechenko! – Miha