PipeMethodCalls icon indicating copy to clipboard operation
PipeMethodCalls copied to clipboard

Is it possible to add an argument for the pipe security when creating the pipe

Open Marledonna opened this issue 1 year ago • 1 comments

I am using the PipeMethodCalls to communicate between a NET core 6 application as PipeServer and a Web API running under IIS as a PipeClient. In this particular situation I get the following error:

{ "ClassName": "System.AggregateException", "Message": "One or more errors occurred.", "Data": null, "InnerException": { "ClassName": "System.UnauthorizedAccessException", "Message": "Access to the path is denied.", "Data": null, "InnerException": null, "HelpURL": null, "StackTraceString": " at System.IO.Pipes.NamedPipeClientStream.TryConnect(Int32 timeout, CancellationToken cancellationToken)\r\n at System.IO.Pipes.NamedPipeClientStream.ConnectInternal(Int32 timeout, CancellationToken cancellationToken, Int32 startTime)\r\n at System.IO.Pipes.NamedPipeClientStream.<>c__DisplayClass20_0.<ConnectAsync>b__0()\r\n at System.Threading.Tasks.Task.InnerInvoke()\r\n at System.Threading.Tasks.Task.<>c.<.cctor>b__272_0(Object obj)\r\n at System.Threading.ExecutionContext.RunFromThreadPoolDispatchLoop(Thread threadPoolThread, ExecutionContext executionContext, ContextCallback callback, Object state)\r\n--- End of stack trace from previous location ---\r\n at System.Threading.ExecutionContext.RunFromThreadPoolDispatchLoop(Thread threadPoolThread, ExecutionContext executionContext, ContextCallback callback, Object state)\r\n at System.Threading.Tasks.Task.ExecuteWithThreadLocal(Task& currentTaskSlot, Thread threadPoolThread)\r\n--- End of stack trace from previous location ---\r\n at PipeMethodCalls.PipeClient1.ConnectAsync(CancellationToken cancellationToken)", "RemoteStackTraceString": null, "RemoteStackIndex": 0, "ExceptionMethod": null, "HResult": -2147024891, "Source": "System.IO.Pipes", "WatsonBuckets": null }, "HelpURL": null, "StackTraceString": " at System.Threading.Tasks.Task.ThrowIfExceptional(Boolean includeTaskCanceledExceptions)\r\n at System.Threading.Tasks.Task.Wait(Int32 millisecondsTimeout, CancellationToken cancellationToken)\r\n at System.Threading.Tasks.Task.Wait(Int32 millisecondsTimeout)\r\n at PoctWebAPI.Infrastructure.DS.DataStoragePipe.Connect() in C:\\Develop\\Projects\\LeydenDelta\\PoctWebApi\\PoctWebAPI\\Infrastructure\\DS\\DataStoragePipe.cs:line 115\r\n at PoctWebAPI.Infrastructure.DS.DataStoragePipe.Login(String user, String password, StringBuilder outdata, Int32& outlen) in C:\\Develop\\Projects\\LeydenDelta\\PoctWebApi\\PoctWebAPI\\Infrastructure\\DS\\DataStoragePipe.cs:line 39\r\n at PoctWebAPI.Controllers.PoctController.Login(LoginRequest request) in C:\\Develop\\Projects\\LeydenDelta\\PoctWebApi\\PoctWebAPI\\Controllers\\PoctController.cs:line 97", "RemoteStackTraceString": null, "RemoteStackIndex": 0, "ExceptionMethod": null, "HResult": -2146233088, "Source": "System.Private.CoreLib", "WatsonBuckets": null, "InnerExceptions": [ { "ClassName": "System.UnauthorizedAccessException", "Message": "Access to the path is denied.", "Data": null, "InnerException": null, "HelpURL": null, "StackTraceString": " at System.IO.Pipes.NamedPipeClientStream.TryConnect(Int32 timeout, CancellationToken cancellationToken)\r\n at System.IO.Pipes.NamedPipeClientStream.ConnectInternal(Int32 timeout, CancellationToken cancellationToken, Int32 startTime)\r\n at System.IO.Pipes.NamedPipeClientStream.<>c__DisplayClass20_0.<ConnectAsync>b__0()\r\n at System.Threading.Tasks.Task.InnerInvoke()\r\n at System.Threading.Tasks.Task.<>c.<.cctor>b__272_0(Object obj)\r\n at System.Threading.ExecutionContext.RunFromThreadPoolDispatchLoop(Thread threadPoolThread, ExecutionContext executionContext, ContextCallback callback, Object state)\r\n--- End of stack trace from previous location ---\r\n at System.Threading.ExecutionContext.RunFromThreadPoolDispatchLoop(Thread threadPoolThread, ExecutionContext executionContext, ContextCallback callback, Object state)\r\n at System.Threading.Tasks.Task.ExecuteWithThreadLocal(Task& currentTaskSlot, Thread threadPoolThread)\r\n--- End of stack trace from previous location ---\r\n at PipeMethodCalls.PipeClient1.ConnectAsync(CancellationToken cancellationToken)", "RemoteStackTraceString": null, "RemoteStackIndex": 0, "ExceptionMethod": null, "HResult": -2147024891, "Source": "System.IO.Pipes", "WatsonBuckets": null } ] }

Marledonna avatar Jun 03 '24 17:06 Marledonna

There is an overload that takes in a NamedPipeClientStream as long as you set PipeOptions.Asynchronous and PipeDirection.InOut on it. That should allow you to set whatever security options you like on the underlying pipe stream.

RandomEngy avatar Jun 07 '24 06:06 RandomEngy