我需要我的服务来更新共享内存中的字段,以便客户端应用程序读取和显示。由于 Session 0 Isolation,我发现我当前的解决方案无效.
我已将 mutex
重命名为es 在修复该元素的全局命名空间中,但它看起来好像 dll 不适合在 session 之间共享,尽管 session 0 隔离的一种解决方案是:
"Explicitly choose either the Local\ or Global\ namespace for any named objects, such as events or mapped memory that the service makes available."
我不知道 dll 的哪一部分可以归类为命名对象,并且需要很长时间才能继续重新安装并逐步检查它。
我看到了命名 channel 的代码卷并被推迟了。我不想创建一个触及磁盘的文件,因为我认为 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。
最佳答案
我建议命名管道:然后你在两个进程之间有适当的受控隔离。共享 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 的一部分)
关于.net - 在 Windows 服务和应用程序之间共享内存,什么最简单?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7807688/