首页 > 解决方案 > “已超出服务器实例的最大数量”是什么意思?

问题描述

System.IO.Pipes.NamedPipeServerStream 类抛出 IOException 并且文档说The maximum number of server instances has been exceeded。这个消息对我来说不是很清楚。有人可以用我能理解的方式解释吗?这是否意味着相同的代码正在由两个不同的进程或类似的东西执行?如果它很少发生,我该如何避免它?

我正在使用以下构造函数:

int maxNumberServerInstance = 1;
new NamedPipeServerStream(name, PipeDirection.InOut, maxNumberServerInstance , PipeTransmissionMode.Message, PipeOptions.None, bufferSize, bufferSize, pipeSecurity);

我得到 IOException。

标签: c#.netpipenamed-pipesnamedpipeserverstream

解决方案


让我们访问文档。

NamedPipeServerStream 类

例外

IOException已超过服务器实例的最大数量。

NamedPipeServerStream.MaxAllowedServerInstances 字段

表示系统资源允许的最大服务器实例数。

评论

创建 NamedPipeServerStream 对象时使用 MaxAllowedServerInstances 设置系统资源允许的最大服务器实例数。

简而言之,错误告诉您已创建最大数量的实例。

如果您只使用名称的默认构造函数,您将获得此信息,此外,您将获得具有以下特征的管道:

  • InOut 的默认管道方向。

  • 共享相同名称的最大服务器实例数设置为 1。

  • 字节的 PipeTransmissionMode 值。

  • 无的 PipeOptions 值。

  • 默认输入和输出缓冲区大小。

  • 没有管道安全。

  • 无的 HandleInheritability 值。

  • 没有指定额外的 PipeAccessRights。

如果您需要多个实例,则至少需要使用以下构造函数:

NamedPipeServerStream(String, PipeDirection, Int32)

参数

  • 管道名称String

    • 管道的名称。
  • 方向PipeDirection

    • 确定管道方向的枚举值之一。
  • maxNumberOfServerInstancesInt32

    • 共享相同名称的服务器实例的最大数量。您可以为此值传递 MaxAllowedServerInstances。

最后,如果您收到此错误并且您只有一个实例,那么您可能对如何创建它们有一个微妙的问题。


推荐阅读