1

C#.Net プロジェクトを Mono に変換しようとしています。NamedPipeServerStream & NamedPipeClientStream クラスは Mono でサポートされておらず、Unhandle 例外をスローします。誰か助けてくれませんか?

コード:

class Program
{
    static string _PipeName = "testPipe";
    static void Main(string[] args)
    {

        ListenForPipeServer();
    }

    static void ListenForPipeServer()
    {
        using (NamedPipeServerStream pipeServer = new NamedPipeServerStream(
                          _PipeName,
                          PipeDirection.InOut,
                          2,
                          PipeTransmissionMode.Message,
                          PipeOptions.None

                          ))
        {
            StreamReader sr = new StreamReader(pipeServer);
            StreamWriter sw = new StreamWriter(pipeServer);


            do
            {
                try
                {
                    pipeServer.WaitForConnection();
                    sw.WriteLine("Testing");
                    sw.Flush();
                    pipeServer.WaitForPipeDrain();
                    Console.WriteLine(sr.ReadLine());

                }
                catch (Exception)
                {

                    throw;
                }
                finally
                {

                    pipeServer.WaitForPipeDrain();
                    if (pipeServer.IsConnected) pipeServer.Disconnect();
                }

            } while (true);

        }
    }



}

未処理の例外:

System.IO.IOException: 名前付きパイプの作成エラー: エラー コード -1
/Users/builder/data/lanes/mono-mac-ui-refresh-2-10/2baeee2f/source/bockbuild/profiles/mono の System.IO.Pipes.UnixNamedPipe.EnsureTargetFile (System.String 名) [0x0001f] で-2-10/build-root/mono-2.10.11/_build/mono-2.10.11.git/mcs/class/System.Core/System.IO.Pipes/PipeUnix.cs:131 at System.IO.Pipes .UnixNamedPipeServer..ctor (System.IO.Pipes.NamedPipeServerStream 所有者、System.String pipeName、Int32 maxNumberOfServerInstances、PipeTransmissionMode transmissionMode、PipeAccessRights 権限、PipeOptions オプション、Int32 inBufferSize、Int32 outBufferSize、HandleInheritability 継承可能性) [0x00012] in /Users/builder/ data/lanes/mono-mac-ui-refresh-2-10/2baeee2f/source/bockbuild/profiles/mono-2-10/build-root/mono-2.10.11/_build/mono-2.10.11.git/ System.IO.Pipes の mcs/class/System.Core/System.IO.Pipes/PipeUnix.cs:265。NamedPipeServerStream..ctor (System.String pipeName、PipeDirection 方向、Int32 maxNumberOfServerInstances、PipeTransmissionMode transmissionMode、PipeOptions オプション、Int32 inBufferSize、Int32 outBufferSize、System.IO.Pipes.PipeSecurity pipeSecurity、HandleInheritability 継承性、PipeAccessRights additionalAccessRights) [0x0004b] in /Users/ builder/data/lanes/mono-mac-ui-refresh-2-10/2baeee2f/source/bockbuild/profiles/mono-2-10/build-root/mono-2.10.11/_build/mono-2.10.11. git/mcs/class/System.Core/System.IO.Pipes/NamedPipeServerStream.cs:100 at System.IO.Pipes.NamedPipeServerStream..ctor (System.String pipeName、PipeDirection 方向、Int32 maxNumberOfServerInstances、PipeTransmissionMode transmissionMode、PipeOptions オプション、 Int32 inBufferSize、Int32 outBufferSize、System.IO.Pipes.PipeSecurity pipeSecurity、HandleInheritability 継承性) [0x00000] in :0 at System.IO.Pipes.NamedPipeServerStream..ctor (System.String pipeName、PipeDirection 方向、Int32 maxNumberOfServerInstances、PipeTransmissionMode transmissionMode、PipeOptions オプション、Int32 inBufferSize、Int32 outBufferSize、System.IO.Pipes. PipeSecurity pipeSecurity) [0x00000] in :0 at System.IO.Pipes.NamedPipeServerStream..ctor (System.String pipeName、PipeDirection 方向、Int32 maxNumberOfServerInstances、PipeTransmissionMode transmissionMode、PipeOptions オプション、Int32 inBufferSize、Int32 outBufferSize) [0x00000] in :0 System.IO.Pipes.NamedPipeServerStream..ctor (System.String pipeName、PipeDirection 方向、Int32 maxNumberOfServerInstances、PipeTransmissionMode transmissionMode、PipeOptions オプション) [0x00000] で:0 at (wrapper remoting-invoke-with-check) System.IO.Pipes.NamedPipeServerStream:.ctor (string,System.IO.Pipes.PipeDirection,int,System.IO.Pipes.PipeTransmissionMode,System.IO.Pipes.PipeOptions ) ConsoleTestPipeApp1.Program.ListenForPipeServer () [0x00000] で /Users/Vadivelu/Project/Service_Test/ConsoleTestPipeApp1/ConsoleTestPipeApp1/Program.cs:21 で ConsoleTestPipeApp1.Program.Main (System.String[] args) [0x00000] で / Users/Vadivelu/Project/Service_Test/ConsoleTestPipeApp1/ConsoleTestPipeApp1/Program.cs:16 [エラー] 致命的な未処理の例外: System.IO.IOException: 名前付きパイプの作成エラー: System.IO.Pipes.UnixNamedPipe.EnsureTargetFile でのエラー コード -1 (System.String 名) /Users/builder/data/lanes/mono-mac-ui-refresh-2-10/2baeee2f/source/bockbuild/profiles/mono-2-10/build-root/mono 内の [0x0001f] -2.10.11/_build/mono-2.10.11.git/mcs/class/System.Core/System.IO.Pipes/PipeUnix.cs:131 at System.IO.Pipes.UnixNamedPipeServer..ctor (System.IO.Pipes.NamedPipeServerStream /Users/builder/data/lanes/mono-mac-ui-refresh-2 の [0x00012] -10/2baeee2f/source/bockbuild/profiles/mono-2-10/build-root/mono-2.10.11/_build/mono-2.10.11.git/mcs/class/System.Core/System.IO.Pipes /PipeUnix.cs:265 at System.IO.Pipes.NamedPipeServerStream..ctor (System.String pipeName、PipeDirection 方向、Int32 maxNumberOfServerInstances、PipeTransmissionMode transmissionMode、PipeOptions オプション、Int32 inBufferSize、Int32 outBufferSize、System.IO.Pipes.PipeSecurity pipeSecurity、HandleInheritability 継承、PipeAccessRights additionalAccessRights) [0x0004b] in /Users/builder/data/lanes/mono-mac-ui-refresh-2-10/2baeee2f/source/bockbuild/profiles/mono- 2-10/build-root/mono-2.10.11/_build/mono-2.10.11.git/mcs/class/System.Core/System.IO.Pipes/NamedPipeServerStream.cs:System.IO.Pipes の 100。 NamedPipeServerStream..ctor (System.String pipeName、PipeDirection 方向、Int32 maxNumberOfServerInstances、PipeTransmissionMode transmissionMode、PipeOptions オプション、Int32 inBufferSize、Int32 outBufferSize、System.IO.PipeSecurity pipeSecurity、HandleInheritability 継承可能性) [0x00000] in :0 at System.IO .Pipes.NamedPipeServerStream..ctor (System.String pipeName、PipeDirection 方向、Int32 maxNumberOfServerInstances、PipeTransmissionMode transmissionMode、PipeOptions オプション、Int32 inBufferSize、Int32 outBufferSize、System.IO.PipeSecurity pipeSecurity) [0x00000] in :0 at System.IO.Pipes.NamedPipeServerStream..ctor (System.String pipeName、PipeDirection 方向、Int32 maxNumberOfServerInstances、 PipeTransmissionMode TransmissionMode、PipeOptions オプション、Int32 inBufferSize、Int32 outBufferSize) [0x00000] in :0 at System.IO.Pipes.NamedPipeServerStream..ctor (System.String pipeName、PipeDirection 方向、Int32 maxNumberOfServerInstances、PipeTransmissionMode transmissionMode、PipeOptions オプション) [0x00000] in :0 at (wrapper remoting-invoke-with-check) System.IO.Pipes.NamedPipeServerStream:.ctor (string,System.IO.Pipes.PipeDirection,int,System.IO.Pipes.PipeTransmissionMode,System.IO.Pipes .PipeOptions) で ConsoleTestPipeApp1.Program.ListenForPipeServer () [0x00000] で /Users/Vadivelu/Project/Service_Test/ConsoleTestPipeApp1/ConsoleTestPipeApp1/Program.cs:21 で ConsoleTestPipeApp1.Program.Main (System.String[] args) [0x00000] で/Users/Vadivelu/Project/Service_Test/ConsoleTestPipeApp1/ConsoleTestPipeApp1/Program.cs:16

4

1 に答える 1

0

唯一の問題は、C# コードがパイプにアクセスしているときに、使用している「testPipe」という名前のパイプが存在しないことです。最初にコマンドをmkfifo testPipe(unix で) 実行してから、次の C# コードを実行すると、動作するはずです。

于 2016-06-09T13:33:55.313 に答える