NamedPipeServerStream类中maxNumberOfServerInstances的用途是什么?

时间:2012-01-11 14:19:27

标签: .net windows-services named-pipes

目前在.NET中编写Windows服务,我正在使用命名管道让其他进程与我的服务进行通信。在NamedPipeServerStream的更复杂的构造函数中,有一个参数,其描述性名称为maxNumberOfServerInstances。真棒。但这意味着什么?

MSDN的文档也有助于解释:

  

共享相同名称的最大服务器实例数。

好。这仍然没有真正告诉我这对我有什么影响,或者我如何利用它。如果NamedPipeServerStream也接受了“当我收到连接时运行此代码”的某个委托,那么这将是有意义的,然后每个“服务器实例”将运行该代码。但事实并非如此。

2 个答案:

答案 0 :(得分:2)

这是一个奇怪的论点,您可以在基础Windows API function (CreateNamedPipe)的文档中找到更多关于它的信息。管道使用非常宝贵的资源用于管道缓冲区,它们是从非分页内核内存池中分配的。我认为这个参数有助于Windows优化池的使用。究竟如何做到这一点是无可救药的。

接受多个客户端连接的单个服务的完美数字是1.如果要运行所有执行相同工作的多个服务,则只会增加它。这非常罕见。

答案 1 :(得分:0)

我用我的 VB 代码测试了这个问题,并将数字设置为 2。

Sub Main()
    Dim pipeserver As NamedPipeServerStream =
        New NamedPipeServerStream("myPipe", PipeDirection.InOut, 2,
                                  transmissionMode:=PipeTransmissionMode.Message)

    pipeserver.WaitForConnection()
    'some process
    Console.ReadLine()  'do not exit until any key pressed
End Sub

使用这个程序,如果我尝试启动第三个实例(EXE),“所有管道实例都忙”会发生异常。

我必须关闭一个实例,以便在实例数量达到 2 时启动另一个实例。

所以我认为这个数字与客户端无关,它只是控制有多少管道服务器可以使用这个命名管道。