gpt4 book ai didi

WCF命名管道IPC

转载 作者:行者123 更新时间:2023-12-03 22:19:42 24 4
gpt4 key购买 nike

本周我一直在努力加快对命名管道的了解。我试图与他们一起解决的任务是,我有一个现有的 Windows 服务,它充当设备驱动程序,将数据从外部设备汇集到数据库中。现在我必须修改这个服务并添加一个可选的用户前端(在同一台机器上,使用一种 IPC 的形式),它可以在数据在设备和数据库之间传递时监控数据,并将一些命令发送回服务.

我最初对 IPC 的想法是命名管道或内存映射文件。到目前为止,我一直在使用 WCF Tutorial Basic Interprocess Communication 来解决命名管道的想法。 .我的想法是用一个额外的线程来设置 Windows 服务,该线程实现 WCF NamedPipe 服务,并将其用作我的驱动程序内部的管道。

我有示例代码可以工作,但是我无法解决两个问题,我希望这里有人可以帮助我:

  • 在本教程中, ServiceHost 是使用 typeof(StringReverser) 而不是通过引用具体类来实例化的。因此,服务器似乎没有与服务本身交互的机制(在 host.Open() 和 host.Close() 行之间)。是否可以在服务器和实际实现服务的类之间创建链接并在它们之间传递信息?如果是这样,如何?
  • 如果我运行服务器的单个实例,然后运行客户端的多个实例,似乎每个客户端都会获得服务类的单独实例。我尝试向实现服务的类添加一些状态信息,但它仅保留在命名管道的实例中。这可能与第一个问题有关,但是无论如何要强制命名管道使用实现服务的类的相同实例?
  • 最后,关于 MMF 与命名管道的任何想法?

  • 编辑 - 关于解决方案

    根据 Tomasr 的回答,解决方案在于使用正确的构造函数来提供实现服务的具体单例类 ( ServiceHost Constructor (Object, Uri[]) )。当时我不明白的是他提到确保服务类是线程安全的。天真地更改构造函数会导致服务器崩溃,这最终导致我从这篇博客条目 Instancecontextmode And Concurrencymode 中了解了 InstanceContextMode | .设置正确的上下文很好地完成了解决方案。

    最佳答案

    对于 (1) 和 (2),答案很简单:您可以要求 WCF 使用服务的单例实例来处理所有请求。大多数情况下,您需要做的就是使用备用 ServiceHost constructor它采用 Object 实例而不是类型。

    但是请注意,您将负责使您的服务类线程安全。

    至于 3,这在很大程度上取决于您需要做什么、您的性能需求、您期望同时有多少客户端、您将移动的数据量以及它需要多长时间可用等.

    关于WCF命名管道IPC,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3066519/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com