您似乎在要求两件事-
- 一种在 Windows 上托管长期运行的持久应用程序的方法,该应用程序将通过串行端口处理某些设备或其他设备。
- 一种从其他应用程序与该应用程序通信的方式。
Windows 服务是第一个很好的解决方案。Windows 服务充当自定义逻辑的应用程序宿主。它通过通用 UI 和 API 为您提供启动/停止和轻量级监控和配置功能。在 C# 中构建 Windows 服务很容易。从命令行、从应用程序、从 GUI 工具启动和停止 Windows 服务很容易。
将 WCF 视为主要的通信接口。WCF 可用于构造 Windows Service 公开的外部接口。如果您想从 .NET 或 HTTP 客户端(REST 或 SOAP)连接到应用程序(服务),那么 WCF 将为您工作。
COM .... 您在 COM 适合的位置遇到的困惑是由于 COM 将接口机制(IDispatch、IUnknown 等)与托管 + 生命周期模型(本地服务器、Inproc 服务器、远程服务器、根据要求自动启动等)。COM 中的托管和生命周期的东西是有效的,但它总是很苗条。很难知道哪些服务启动了,持续了多长时间。难以按需启动和停止。
在这种情况下,COM 与 WCF 一样,主要用作通信接口。如果您想使用基于组件的接口连接到服务,COM 可能是 Windows 服务托管的一个很好的补充。
COM 和 WCF(REST 或 SOAP)并不相互排斥,事实上许多应用程序都公开了多个接口。你可以选择做一个,或另一个,或两者兼而有之。没有错误的答案,这取决于您的要求。
如果我这样做,我将使用 Windows 服务,并且我将从该服务公开一个 COM 接口,如此处所述。生命周期和托管内容由 Windows 服务负责。然后可以通过 COM 访问该服务,这意味着通过几乎任何编程或脚本语言/环境。Javascript、VB6、Excel 或 OFFICE、Python、Perl 等。
我还考虑从服务中公开 WCF 接口。这也将允许任何 REST 客户端进行连接。将 WCF 视为无线电话,将 COM 视为固定电话。有时你只想要一个。有时你想要两者。