Мне нужен ваш совет в следующей ситуации.Нужна консультация с услугами Windows и CDO
Задача довольно проста. Мне нужно создать службу Windows, которая работает с почтой (Exchange Server, чтение почты), работать с файлами (сохранять вложения в определенную папку и т. Д.) И записывать результаты в базу данных (создавать документы из почтовых элементов или писать промежуточные результаты).
Эта услуга была создана давно и работает сейчас довольно хорошо. Но есть одна большая проблема: она висит очень часто. Он зависает в некоторых странных местах и коллеги (со стороны нашего клиента), которые контролируют нашу службу, должны перезапустить ее вручную. Более того, они не перезапускают его. Они должны убить процесс обслуживания и снова запустить его из SCM.
Что у меня есть: служба Windows, написанная на C#, которая работает с библиотекой CDO 1.21. Эта библиотека, безусловно, неуправляема. Мы используем эту библиотеку, потому что мы должны работать над протоколом MAPI с Exchange Server.
В чем проблема: поскольку я написал основную проблему, она висит. Также мы должны работать именно с MAPI. Не POP3 ни Exchange Web Services ни другие протоколы.
Что я хочу иметь: стабильная служба Windows, работающая с Exchange Server. И желательно, чтобы это было написано на C#.
Так что вы можете предложить? Я не нашел никаких управляемых библиотек для работы с MAPI, только некоторые проекты с открытым исходным кодом, но я их не пробовал. Также есть некоторая библиотека, называемая CDO, но она также неуправляема. Вероятно, мне нужно переписать службу на C++, но я не очень хорошо знаком с ней. Я нашел exmaple здесь: http://code.msdn.microsoft.com/windowsdesktop/CppWindowsService-cacf4948, но мне также нужно работать с файлами и SQL. Все это готово к работе на C#. Есть идеи?
Я не могу вспомнить сейчас, но если я не ошибаюсь, иногда он висит на методе выхода из системы. Возможно, некоторые другие. Я даже пытался вставить некоторые части кода в поток, но это не помогло. И, конечно же, я знаю, что CDO 1.21 очень старый, но он был выбран не мной. Однако мы используем его в некоторых других сервисах, поскольку мы уже работали с ним :) – IRQ
Мы пытались использовать RDO, но мы не тестировали его, поэтому мы не пытались переписать эту услугу. Кроме того, RDO также неуправляем. Итак, вы предлагаете либо переписывать службу на C++/Delphi, либо по крайней мере с помощью RDO? – IRQ
Когда логос зависает, вы уверены, что нет активных объектов CDO 1.21? Вы сначала вызываете GC.Collect()? Вы можете делать C++/Delphi или RDO. RDO, вероятно, будет намного проще, если у вас уже есть большая часть вашего кода на C++/Delphi. –