如何在 .NET 程序之间共享信息
Posted
技术标签:
【中文标题】如何在 .NET 程序之间共享信息【英文标题】:How to share information between .NET programs 【发布时间】:2015-08-05 07:32:23 【问题描述】:我正在开发 .NET Web 应用程序,该应用程序也在后台运行不同的作业。这些后台作业更新数据库、创建报告文件、删除旧文件等。
作业按计划触发,并且计划程序本身通过 Windows 的任务计划程序每小时触发一次。
到目前为止,我一直通过将消息记录到 Windows 事件查看器来监视作业的状态,但是这种方法非常麻烦。 我想实现一个带有 GUI 的新程序,该程序将与作业通信并监视它们的活动。启动时 gui 应显示以下信息:
状态(运行与空闲) 进度条(“24% 完成”、“23423 个项目中的 327 个已完成”)gui.exe 应该独立于 jobs.exe 运行(启动或停止 gui 不应影响作业,反之亦然)。
我正在寻找建议,在 jobs.exe 和 gui.exe 之间共享信息的最佳方式是什么
【问题讨论】:
“什么是共享信息的最佳方式”有很多方法:对于特定用途,哪种方式更好(我怀疑任何一种都是“最好的”)取决于细节。就我个人而言,我会关注 WMI,因为它可以启用远程和命令行(自动)监控。还希望公开性能计数器。 不要重新发明***。使用操作系统的机制——性能计数器、Windows 事件等。.NET 已经支持它们。有很多工具(GUI 和其他工具)使用它们进行仪表板、警报、监控等 【参考方案1】:一般性答案 - 所有形式的 IPC 都涉及使用一些可由两个进程访问的共享资源。示例:
网络套接字(以“网络”作为共享资源) 命名管道 共享内存 普通的旧磁盘文件(不是进行 IPC 的最佳方式,但仍然是一种有效的方式) 共享数据库特定的 .NET 选项:
远程处理 WCF 网络 API 命名管道仅举几例。
研究其中一些,看看它们是否适合您的用例
【讨论】:
请注意,OP 实际上是在询问 monitoring 应用程序,但假定需要 IPC。【参考方案2】:取决于 gui.exe 是否与您的作业服务在同一系统上运行。如果是这样,那么最好不要使用任何 web api / 网络套接字 / WCF 进行通信,而是使用更简单的 IPC 方法。我个人喜欢消息队列。
【讨论】:
以上是关于如何在 .NET 程序之间共享信息的主要内容,如果未能解决你的问题,请参考以下文章
如何在 ASP.NET MVC 中的 2 个不同项目/应用程序之间共享母版页?
如何在两个 .NET AppDomain 之间传递未知类型?
如何使用 WatchConnectivity 在我的 iOS 和 Watch 应用程序之间共享信息?
Sencha Touch 2:数据集成或如何在sencha和javascript之间共享动态信息