Service 需要windows服务和CDO的建议吗

Service 需要windows服务和CDO的建议吗,service,exchange-server,managed,mapi,cdo.message,Service,Exchange Server,Managed,Mapi,Cdo.message,在以下情况下,我需要你的建议 任务相当简单。我必须创建一个windows服务,该服务与邮件交换服务器一起工作,读取邮件,处理文件,将附件保存到特定文件夹,等等,并将结果写入数据库。从邮件项目创建文档或写入中间结果 这项服务是很久以前创建的,现在运行得相当好。但有一个大问题:它经常挂起。它挂在一些奇怪的地方,我们客户端的同事监视我们的服务时不得不手动重新启动它。此外,他们不会重新启动它。他们必须终止服务进程并从SCM重新启动它 我拥有的:一个用C编写的windows服务,可以与CDO 1.21库一

在以下情况下,我需要你的建议

任务相当简单。我必须创建一个windows服务,该服务与邮件交换服务器一起工作,读取邮件,处理文件,将附件保存到特定文件夹,等等,并将结果写入数据库。从邮件项目创建文档或写入中间结果

这项服务是很久以前创建的,现在运行得相当好。但有一个大问题:它经常挂起。它挂在一些奇怪的地方,我们客户端的同事监视我们的服务时不得不手动重新启动它。此外,他们不会重新启动它。他们必须终止服务进程并从SCM重新启动它

我拥有的:一个用C编写的windows服务,可以与CDO 1.21库一起使用。这个库肯定是非托管的。我们使用此库是因为我们必须使用Exchange Server处理MAPI协议

问题是什么:正如我所写的,主要的问题是悬挂。此外,我们还必须完全与MAPI合作。不是POP3,也不是Exchange Web服务,也不是任何其他协议

我想要的是:稳定的Windows服务与Exchange Server一起工作。它是用C写的


那你有什么建议?我没有找到任何可用于MAPI的托管库,只有一些开源项目,但我没有尝试它们。还有一些称为CDO的库,但它也是非托管的。也许我必须重写C++中的服务,但我不太熟悉它。我在这里找到了一个exmaple:但我还必须处理文件和SQL。这一切在C语言中都准备好了。有什么想法吗?

你知道哪种CDO称为挂起吗?请记住,CDO 1.21至少在功能方面已经10年没有更新了

有一个很好的理由说明为什么没有管理库与MAPI一起工作——你真的需要C++或Delphi来使用它。有一个叫做MAPI33的图书馆,但我认为它不再被开发或出售了


你看过吗?它提供了CDO 1.21的所有功能以及更多功能。

我现在想不起来了,但如果我没有弄错的话,有时它会挂断注销方法。可能是别的什么。我甚至试着把代码的某些部分放到线程中,但没有用。当然,我知道CDO 1.21非常古老,但它不是我选择的。但是,我们在其他一些服务中使用了它,因为我们已经使用过它:我们尝试使用RDO,但是我们没有很好地测试它,所以我们没有尝试重写这个服务。此外,RDO也是非托管的。所以,您建议至少在C++/Delphi中重写服务或使用RDO?当注销挂起时,您是否确保没有活动的CDO 1.21对象?你会先打电话给GC,对方付费吗?您可以使用C++/Delphi或RDO。除非您已经编写了大部分C++/Delphi代码,否则RDO可能会容易得多。注销会随机挂起。它可以工作,工作,工作,哦!它挂起来了。可能不是注销,我现在记不起来了。在活动对象下是什么意思?主动引用?我也不使用GC.Collect,据说手动调用它不是一种好的做法。我读了不同的文章,但没有完全理解使用GC.Collect和Marshal.RealesaeComObject/finalrelease的必要性。您在这个问题上的帮助也很感谢:如果有活动对象,注销可以挂起。请尝试使用Marshal.RealeaseComObject和GC.Colelct。