我需要我的服务来更新共享内存中的字段,以便客户端应用程序读取和显示。由于Session 0 Isolation,我发现我当前的解决方案无效。
我已经在全局命名空间中重命名了mutex
es,它修复了该元素,但看起来dll不适合在会话之间共享,尽管会话0隔离的一个解决方案是:
“明确地为任何命名对象选择Local \或Global \命名空间,例如 服务提供的事件或映射内存。“
我不知道dll的哪个部分可以被归类为命名对象,并且需要花费很长时间才能继续重新安装并逐步检查它。
我看到了命名频道的代码卷并被推迟了。我不想创建一个触及磁盘的文件,因为我想象的是memoryMappedFile解决方案。 dll的共享部分可以工作吗?否则什么是最简单的?
public ref class ServerGUIBridge
{
public:
#pragma data_seg(".sdata")
static int commonIntShouldBeGlobal = 0;
static bool hasBeenInitializedMakeMeGlobal = false;
#pragma data_seg()
#pragma comment(linker, "/section:.sdata,rws")
我正在使用.NET 2.0,所以请不要使用WCF。
答案 0 :(得分:1)
我建议使用命名管道:然后在两个进程之间进行适当的控制隔离。共享DLL听起来像是充满了危险。
MSDN上记录了命名管道:http://msdn.microsoft.com/en-us/library/aa365590.aspx
这是一篇有用的.NET 2.0文章:http://www.switchonthecode.com/tutorials/interprocess-communication-using-named-pipes-in-csharp
(请记住,.NET 3.5及更高版本有一个NetNamedPipeBinding类[http://msdn.microsoft.com/en-us/library/system.servicemodel.netnamedpipebinding.aspx],它是WCF的一部分)
答案 1 :(得分:0)
一种经常被忽视的IPC方法是写入注册表。对于我建议分享的两个POD成员,这将是理想的解决方案。 IPC, MSDN, and the registry
答案 2 :(得分:0)
所有.NET框架版本都具有Remoting功能。它允许在另一个appdomain中调用方法,这些方法可以在不同的进程中。有关示例和用法,请参阅MSDN:http://msdn.microsoft.com/en-us/library/kwdt6w2k(v=VS.80).aspx