我有一个解决方案,其中包含许多单独的EXE,它们需要能够相互发送消息。现在每个EXE必须事先了解彼此,他们使用IPC进行通信,但我真的想要一个更优雅的解决方案。
我想要一个工厂,其中每个EXE都可以将自己注册为端点,任何EXE都可以进入工厂并检索所有已注册端点的列表,这样他就可以将目标消息发送到他当时需要与之交谈的应用程序,无需事先了解所有谈话过程的所有细节。
我已经解决了工厂DLL的问题,但我不知道如何使它成为一个全局实例,工厂的一个实例在解决方案中所有正在运行的EXE之间共享。我被告知通过NT服务,全局程序集缓存使用WCF,甚至告诉他们在allUsers AppData中维护一个包含序列化端点的XML文件。我还没有对这些选项进行调查,但我打算在接下来的几天内开始对它们进行研究。
我想知道这里是否有人可以推荐一个简单,优雅和常识性的建议来完成我需要做的事情(在许多正在运行的流程中共享一个实例工厂)
答案 0 :(得分:1)
DLL本身被加载到每个EXE的地址空间中。但是,您可以在DLL中声明共享内存块,或直接使用Windows API使用内存映射文件。通过这种方式,您可以获得一块内存,可以同时从多个EXE(或从同一个DLL加载到多个EXE中)访问。您将需要一个互斥锁来防止并发写入内存块。就这样。
忘记WCF和其他复杂的东西 - 提供这些建议的人通常不太了解IPC和系统API,并推荐他们所知道的唯一内容。