尝试通过管道发送字符串时获得罕见的异常

时间:2018-06-04 13:35:27

标签: c# named-pipes

我有两个与管道通信的不同应用程序。大多数请求都可以正常工作,但在尝试通过管道发送字符串时,我会不时遇到异常:

System.InvalidOperationException : Pipe hasn't been connected yet.

使用以下堆栈:

   at System.IO.Pipes.PipeStream.CheckWriteOperations()
   at System.IO.Pipes.PipeStream.Flush()
   at System.IO.StreamWriter.Flush(Boolean flushStream, Boolean flushEncoder)
   at System.IO.StreamWriter.Dispose(Boolean disposing)
   at System.IO.TextWriter.Dispose()

最后一行指向客户端管道代码中的行,我用“>”

标记
    using (var pipeClient =
        new NamedPipeClientStream("PipeName"))
    {
        try
        {
            using (var streamWriter = new StreamWriter(pipeClient))
            {
                pipeClient.Connect(20000);
                streamWriter.AutoFlush = true;
                streamWriter.WriteLine(dataToSend);
                pipeClient.WaitForPipeDrain();
           >}
        }
        catch (Exception x)
        {
            Log.Error("ExceptionText");
        }
    }

在服务器上,这就是管道的处理方式:

using (var streamReader = new StreamReader(pipeServer))
                {
                        pipeServer.WaitForConnection();
                        string data;
                        while ((data = streamReader.ReadLine()) != null)
                        {
                         //Process the data here...
                        }
                        pipeServer.Disconnect();
                }

根据MSDNPipeStream.Flush()甚至不应该做任何事情,但它会以某种方式失败?我对整个情况感到困惑。

这一切意味着什么?它是否试图处理在某种程度上断开连接的管道? 如果是,我该怎么办呢?

或者我做错了什么?

修改: 根据{{​​3}},在PipeStream.Flush()期间检查管道状态。如果状态恰好是WaitingToConnect,则返回我正在获得的异常。

但这怎么可能发生?如果pipeClient.Connect(20000);没有例外,则状态必须不同,无论是ConnectedBroken还是其他。

0 个答案:

没有答案