2014-01-26 9 views
1

Мне нужен ваш совет в следующей ситуации.Нужна консультация с услугами 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#. Есть идеи?

ответ

0

Знаете ли вы, какие вызовы CDO зависают? Имейте в виду, что CDO 1.21 не обновлялся (по крайней мере, функционально) более 10 лет.

Существует хорошая причина, по которой нет управляемых библиотек, которые работают с MAPI - для этого вам действительно нужны C++ или Delphi. Была библиотека под названием MAPI33, но я не думаю, что она уже разрабатывается или продается.

Вы посмотрели Redemption? Это RDO family of objects предоставляет все функции CDO 1.21 и многое другое.

+0

Я не могу вспомнить сейчас, но если я не ошибаюсь, иногда он висит на методе выхода из системы. Возможно, некоторые другие. Я даже пытался вставить некоторые части кода в поток, но это не помогло. И, конечно же, я знаю, что CDO 1.21 очень старый, но он был выбран не мной. Однако мы используем его в некоторых других сервисах, поскольку мы уже работали с ним :) – IRQ

+0

Мы пытались использовать RDO, но мы не тестировали его, поэтому мы не пытались переписать эту услугу. Кроме того, RDO также неуправляем. Итак, вы предлагаете либо переписывать службу на C++/Delphi, либо по крайней мере с помощью RDO? – IRQ

+0

Когда логос зависает, вы уверены, что нет активных объектов CDO 1.21? Вы сначала вызываете GC.Collect()? Вы можете делать C++/Delphi или RDO. RDO, вероятно, будет намного проще, если у вас уже есть большая часть вашего кода на C++/Delphi. –