【问题标题】:What does "The maximum number of server instances has been exceeded" mean?“已超过服务器实例的最大数量”是什么意思?
【发布时间】:2019-02-07 08:05:30
【问题描述】:

System.IO.Pipes.NamedPipeServerStream 类抛出 IOException 并且文档说 已超过服务器实例的最大数量。 这个消息对我来说不是很清楚。有人可以用我能理解的方式来解释吗?这是否意味着相同的代码正在由两个不同的进程或类似的东西执行?如果很少发生,如何避免?

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

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

我得到 IOException。

【问题讨论】:

  • 请输入代码...这样我们就可以看到你在做什么
  • 发布完整的异常文本,而不仅仅是类型名称和消息。您可以通过Exception.ToString() 轻松获取。这显示了实际抛出的方法以及导致它的调用堆栈。也发布代码。
  • 查看 NamedPipeServerStream 类的文档。请注意,它具有接受 maxNumberOfServerInstances 参数的构造函数。那个最大值。

标签: c# .net pipe named-pipes namedpipeserverstream


【解决方案1】:

让我们访问文档。

NamedPipeServerStream Class

例外情况

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

NamedPipeServerStream.MaxAllowedServerInstances Field

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

备注

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

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

如果你使用默认构造函数,你会得到这个,另外你会得到一个具有以下特征的管道:

  • InOut 的默认管道方向。

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

  • Byte 的 PipeTransmissionMode 值。

  • PipeOptions 值为 None。

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

  • 没有管道安全性。

  • HandleInheritability 值为 None。

  • 没有指定额外的 PipeAccessRights。

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

NamedPipeServerStream(String, PipeDirection, Int32)

参数

  • 管道名称String

    • 管道的名称。
  • 方向PipeDirection

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

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

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

【讨论】:

  • 感谢回答,我添加了我使用的构造函数。
  • @BarışAkkurt 好的,您打开的实例可能比您想象的要多
猜你喜欢
  • 2018-02-10
  • 2020-10-31
  • 2011-01-19
  • 1970-01-01
  • 1970-01-01
  • 2011-08-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多