0

我在 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 包装在下面吗?

4

1 回答 1

1

如果一切都失败了,你总是可以CreateNamedPipe通过 P/Invoke 调用,指定你想要的默认超时,就像你在 Win32 服务器中所做的那样,然后使用NamedPipeServerStream带有 , 的 ctor 重载SafePipeHandle来包装它。

.NET 服务器代码的其余部分不需要更改。

于 2014-03-14T15:55:27.523 回答