0

クライアントが Win32 CreateFile および WaitNamedPipe メソッドを使用して接続を確立する C# で NamedPipeServerStreams を使用しています。

以前は、サーバーも Win32 であり、CreateNamedPipe() を呼び出すときに、パイプの構築の一部として「DefaultTimeOut」を指定していました。

私が読んだり見たりしたことから、クライアントはこのタイムアウト値を継承し、WaitNamedPipe を呼び出すときにそれを使用することを理解しています。

CreateNamedPipeに関する Microsoft の MSDN ドキュメントには、DefaultTimeOut パラメータに関する次の説明があります。

*nDefaultTimeOut [in] WaitNamedPipe 関数が NMPWAIT_USE_DEFAULT_WAIT を指定する場合のデフォルトのタイムアウト値 (ミリ秒単位)。名前付きパイプの各インスタンスは、同じ値を指定する必要があります。*

.NET NamedPipeServerStream を使用するように変更すると、このデフォルトのタイムアウト値をコンストラクターに渡す (またはそれ以外の方法で) 方法がないように思われ、以前はそうではなかった WaitNamedPipe セマフォでクライアントが定期的にタイムアウトするようになりました。回避したい独自のタイムアウトを指定するようにすべてのクライアントを変更しない限り、.NET でこれを行う方法を見つけることができないようです。.NET NamedPipe コードは、Win32 API を下にラップしているだけなのでしょうか?

4

1 に答える 1

1

他のすべてが失敗した場合CreateNamedPipeは、Win32 サーバーで行ったのと同じように、必要なデフォルトのタイムアウトを指定して、P/Invoke を介してNamedPipeServerStreamいつでも呼び出すことができますSafePipeHandle

残りの .NET サーバー コードを変更する必要はありません。

于 2014-03-14T15:55:27.523 に答える