Sam*_*eby 6 .net windows-services named-pipes
目前在.NET中编写Windows服务,我正在使用命名管道让其他进程与我的服务进行通信.在NamedPipeServerStream的更复杂的构造,有一个与maxNumberOfServerInstances的描述性名称的参数.真棒.但是,这是什么意思?
MSDN的文档也有助于解释:
共享相同名称的最大服务器实例数.
好的.这仍然没有真正告诉我这对我有什么影响,或者我如何利用它.如果NamedPipeServerStream也接受了"当我收到连接时运行此代码"的某个委托,那么这将是有意义的,然后每个"服务器实例"将运行该代码.但事实并非如此.
NamedPipeServerStream实际上,它限制了您可以为同一管道名称创建的实例数量。这会抛出System.IO.IOException: All pipe instances are busy.:
var pipeStreamA = new NamedPipeServerStream("mypipe1", PipeDirection.InOut, 1);
var pipeStreamB = new NamedPipeServerStream("mypipe1", PipeDirection.InOut, 1);
Run Code Online (Sandbox Code Playgroud)
如果更改为-1或2,则不会抛出异常。此外,它只尊重您创建的第一个实例的值。如果您在第一次调用时指定 1,在第二次调用时指定 2,它仍然会抛出异常。
将其设置为您期望尝试运行的最大并发服务器数可能是个好主意,因为正如 Hans 提到的,它可能会使用该数字作为要分配的资源量的提示。