首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >没有服务中介者的.NET IPC

没有服务中介者的.NET IPC
EN

Stack Overflow用户
提问于 2008-09-04 01:20:39
回答 5查看 2.2K关注 0票数 0

我有两个不相关的进程,它们使用.NET程序集作为插件。但是,这两个进程都可以在任何时候启动/停止。我不能依赖某个特定的进程作为服务器。实际上,其中一个进程可能有多个副本在运行,但另一个进程中只有一个。

我最初实现了一个基于this article的解决方案。但是,这要求实现服务器的服务器在客户端之前运行。

当客户端首先运行时,实现对服务器的某种通知的最佳方式是什么?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2008-11-03 05:07:30

使用共享内存比较困难,因为您必须管理共享内存缓冲区的大小(或者只是预先分配足够的内存)。您还必须手动管理放入其中的数据结构。一旦你对它进行了测试和工作,由于它的简单性,它将更容易使用和测试。

如果使用远程处理路由,则可以使用命名管道进行单个系统通信,而不是使用IpcChannel或HTTP通道。http://msdn.microsoft.com/en-us/library/4b3scst2.aspx。此解决方案的问题在于,您需要提出一个注册表类型的解决方案(在共享内存或其他持久性存储中),以便进程可以向其注册其端点。这样,当您查找它们时,您可以找到一种方法来查询系统上运行的所有端点,并且您可以找到您正在查找的端点。使用远程处理的好处是序列化和方法调用都非常简单。此外,如果您决定移动到网络上的多台计算机,则只需翻转开关即可使用网络通道。缺点是,除非您清楚地将什么是“远程”调用与什么是“本地”调用分开,否则远程处理可能会令人沮丧。

我对WCF了解不多,但这可能也值得研究一下。Spider sense表示,对于这个问题,它可能有一个更优雅的解决方案。也许吧。

或者,您可以创建一个独立于所有其他进程的“服务器”进程,并启动该进程(使用系统互斥锁确保不会启动多个进程),以充当所有其他进程的中介和注册中心。

还有一件事要研究事件的发布-订阅模型(发布/订阅)。当您的侦听器在事件源可用之前启动,但您不想等待注册该事件时,此技术会很有帮助。“服务器”进程将处理事件注册表,以链接发布者和订阅者。

票数 1
EN

Stack Overflow用户

发布于 2008-09-04 02:06:48

为什么不把服务器和客户端放在两端,谁先来谁就是服务器呢?如果服务器退出,仍处于活动状态的客户端将切换角色。

票数 0
EN

Stack Overflow用户

发布于 2008-10-20 23:06:26

有许多方法可以处理进程间通信(.net或非),通过TCP/HTTP隧道是一种,way...but可能是一个非常糟糕的选择(取决于环境和环境)。

共享内存和命名管道是两种可能对您更好的解决方案(是的,它们可以在.Net中完成)。由于一些AppDomain问题,我个人不喜欢.Net Framework...but中的IPC类……

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42987

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档