我正在使用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包装在下面?
答案 0 :(得分:1)
如果所有其他方法都失败了,您可以随时通过P / Invoke调用CreateNamedPipe
,指定您想要的默认超时,就像在Win32服务器中那样,然后使用NamedPipeServerStream
ctor重载SafePipeHandle
,包装它。
其余的.NET服务器代码无需更改。