加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Windows > 正文

.net – 在Windows服务和应用程序之间共享内存,最简单的方法是什

发布时间:2020-12-14 02:45:08 所属栏目:Windows 来源:网络整理
导读:我需要我的服务来更新共享内存中的字段,以便客户端应用程序读取和显示.由于 Session 0 Isolation,我发现我目前的解决方案无效. 我已经在Global命名空间中重命名了互斥锁,它修复了该元素,但它看起来并不像dll可以在会话之间共享,尽管Session 0 Isolation的一
我需要我的服务来更新共享内存中的字段,以便客户端应用程序读取和显示.由于 Session 0 Isolation,我发现我目前的解决方案无效.

我已经在Global命名空间中重命名了互斥锁,它修复了该元素,但它看起来并不像dll可以在会话之间共享,尽管Session 0 Isolation的一个解决方案是:

“Explicitly choose either the Local or Global namespace for any named objects,such as
events or mapped memory that the service makes available.”

我不知道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.

解决方法

我建议命名管道:然后你在两个进程之间有适当的控制隔离.共享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的一部分)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读