代码之家  ›  专栏  ›  技术社区  ›  Peter M

WCF命名管道IPC

  •  6
  • Peter M  · 技术社区  · 16 年前

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

    1. 在本教程中,ServiceHost是通过typeof(StringReverser)实例化的,而不是通过引用具体的类。因此,服务器似乎没有与服务本身交互的机制(在host.Open()和host.Close()行之间)。是否可以在服务器和实际实现服务的类之间创建链接并传递信息?如果是,怎么做?

    2. 如果我运行一个服务器实例,然后运行多个客户机实例,那么每个客户机似乎都会获得一个单独的服务类实例。我尝试向实现服务的类添加一些状态信息,但它只保留在命名管道的实例中。这可能与第一个问题有关,但是否仍有必要强制命名管道使用实现服务的类的同一实例?

    编辑-关于解决方案

    根据Tomasr的回答,解决方案在于使用正确的构造函数来提供实现服务的具体单例类( ServiceHost Constructor (Object, Uri[]) Instancecontextmode And Concurrencymode

    1 回复  |  直到 14 年前
        1
  •  2
  •   tomasr    16 年前

    对于(1)和(2),答案很简单:您可以要求WCF使用服务的单例实例来处理所有请求。通常您需要做的就是使用备用ServiceHost constructor 接受对象实例而不是类型的。

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