Я знаю, что эта ветка устарела, но я много работал с Domino API и типичными объектами Notes LotusScript через Domino COM API.
Проблема с Domino API заключается в том, что его управление памятью через COM ужасно (при использовании API на C# или VB и т. д.), и это вызовет утечку памяти и, в конечном итоге, приведет к сбою всего API и клиента Notes (даже если у вас не открыт клиент, вы не сможете запустить его после сбоя API без перезагрузки компьютера или вызова «nsd -kill»). Весело.
Я обнаружил, что с помощью Notes C API в C# через P/Invoke можно лучше управлять ресурсами памяти, чтобы API не вызывал ужасных утечек памяти и сбоев. Я написал частичную оболочку на C#, используя P/Invoke, которая обращается к Notes C API из notes.dll. Я использую его не для работы в среде Domino, а для использования сборки Notes для доступа к файлам NSF для извлечения информации DXL в среде C#. Очевидно, вам потребуется установить клиент Notes, чтобы иметь доступ к notes.dll и C API. Но моя C#-оболочка Notes C API отлично работает и более стабильна, чем Domino COM API, который предоставляется при установке клиента Notes.
Классы, которые я реализовал на С# (которые мне только нужны) из Notes C API:
NotesSession (как NotesRuntime) NotesDatabase NotesNote NotesItem NotesDXLExporter NotesNoteCollection
А также некоторые другие промежуточные классы, перечисления и структуры для обработки перевода из C API в C#.
Классы, которые я реализовал до сих пор, служили целям, которые мне требовались от Notes C API. Их определенно можно расширить, но я не пытался инкапсулировать весь API в оболочку C# P/Invoke. Мне также пришлось создать обработчики для работы со встроенными объектами OLE, которые могут храниться в документах Notes, и для извлечения сохраненных данных из этих объектов OLE с помощью объектов Windows IStorage.
Примечание. Я могу предоставить несколько примеров позже (мне нужно переименовать пространства имен и обобщить код из-за проприетарных соображений), но я создал классы-оболочки C#, используя "Lotus C API Notes/Domino 8.5.2 Reference" NSF, который предоставлен IBM/Lotus (как загружаемый NSF). Используя определения C и ссылки на классы, я мог преобразовать их в вызовы C# P/Invoke и обернуть их в более дружественные классы C#, которые затем вели себя больше как вызовы классов LotusScript, но внутри C#, а реализованные классы управляют и освобождают свою память, поэтому что все это не дает сбоев после того, как вы получили доступ к сотням тысяч документов из программы C #. :)
person
Brien Halstead
schedule
09.04.2016