在.NET命名管道中指定默认等待超时

时间:2014-02-06 08:46:28

标签: .net winapi named-pipes namedpipeserverstream

我正在使用C#中的NamedPipeServerStreams,我们的客户端将使用Win32 CreateFile和WaitNamedPipe方法建立连接。

以前我们的服务器也是Win32,并在调用CreateNamedPipe()时指定'DefaultTimeOut'作为管道构造的一部分。

根据我的阅读/看到,我的理解是客户端继承此超时值并在调用WaitNamedPipe时使用它。

Microsoft CreateNamedPipe的MSDN文档对DefaultTimeOut参数有以下描述 -

  

* nDefaultTimeOut [in]默认超时值,以毫秒为单位,如果   WaitNamedPipe函数指定NMPWAIT_USE_DEFAULT_WAIT。每   命名管道的实例必须指定相同的值。*

当更改为使用.NET NamedPipeServerStream时,似乎无法将此默认超时值传递给构造函数(或其他方式),并且我的客户端现在定期在WaitNamedPipe信号量上超时,之前它们不在此状态。如果不改变我们所有的客户来指定我们想要避免的超时,我似乎无法在.NET中找到这样做的方法。当然,.NET NamedPipe代码只是将Win32 API包装在下面?

1 个答案:

答案 0 :(得分:1)

如果所有其他方法都失败了,您可以随时通过P / Invoke调用CreateNamedPipe,指定您想要的默认超时,就像在Win32服务器中那样,然后使用NamedPipeServerStream ctor重载SafePipeHandle,包装它。

其余的.NET服务器代码无需更改。