예제 #1
0
 public ServerStreamPool(string pipeName, NamedPipeServerOptions options,
                         Func <INamedPipeServerStream, Task> handleConnection)
 {
     _pipeName         = pipeName;
     _options          = options;
     _handleConnection = handleConnection;
 }
        public ChannelContext Create(NamedPipeServerOptions options)
        {
            var impl   = new TestServiceImpl();
            var server = new NamedPipeServer(_pipeName, options);

            TestService.BindService(server.ServiceBinder, impl);
            server.Start();
            return(new ChannelContext
            {
                Impl = impl,
                Client = CreateClient(),
                OnDispose = () => server.Kill()
            });
        }
        public void SimpleUnaryWithACLsDenied(NamedPipeChannelContextFactory factory)
        {
            PipeSecurity       security = new PipeSecurity();
            SecurityIdentifier sid      = new SecurityIdentifier(WellKnownSidType.WorldSid, null);

            security.AddAccessRule(new PipeAccessRule(sid, PipeAccessRights.ReadWrite, AccessControlType.Allow));
            security.AddAccessRule(new PipeAccessRule(WindowsIdentity.GetCurrent().User, PipeAccessRights.ReadWrite, AccessControlType.Deny));

            NamedPipeServerOptions options = new NamedPipeServerOptions {
                PipeSecurity = security
            };

            using var ctx = factory.Create(options);
            var exception = Assert.Throws <UnauthorizedAccessException>(() => ctx.Client.SimpleUnary(new RequestMessage {
                Value = 10
            }));
        }
        public void SimpleUnaryWithACLs(NamedPipeChannelContextFactory factory)
        {
            PipeSecurity       security = new PipeSecurity();
            SecurityIdentifier sid      = new SecurityIdentifier(WellKnownSidType.WorldSid, null);

            security.AddAccessRule(new PipeAccessRule(sid, PipeAccessRights.ReadWrite, AccessControlType.Allow));
            security.AddAccessRule(new PipeAccessRule(WindowsIdentity.GetCurrent().User, PipeAccessRights.FullControl, AccessControlType.Allow));

            NamedPipeServerOptions options = new NamedPipeServerOptions {
                PipeSecurity = security
            };

            using var ctx = factory.Create(options);
            var response = ctx.Client.SimpleUnary(new RequestMessage {
                Value = 10
            });

            Assert.Equal(10, response.Value);
            Assert.True(ctx.Impl.SimplyUnaryCalled);
        }
예제 #5
0
        public static INamedPipeServerStream Create(string pipeName, NamedPipeServerOptions options)
        {
            var pipeOptions = PipeOptions.Asynchronous;

#if NETCOREAPP || NETSTANDARD
#if !NETSTANDARD2_0
            if (options.CurrentUserOnly)
            {
                pipeOptions |= PipeOptions.CurrentUserOnly;
            }
#endif

#if NET5_0
            return(new NamedPipeServerStreamFacade(NamedPipeServerStreamAcl.Create(pipeName,
                                                                                   PipeDirection.InOut,
                                                                                   NamedPipeServerStream.MaxAllowedServerInstances,
                                                                                   PipeTransmissionMode.Message,
                                                                                   pipeOptions,
                                                                                   0,
                                                                                   0,
                                                                                   options.PipeSecurity)));
#else
            return(new NamedPipeServerStreamFacade(new NamedPipeServerStream(pipeName,
                                                                             PipeDirection.InOut,
                                                                             NamedPipeServerStream.MaxAllowedServerInstances,
                                                                             PipeTransmissionMode.Message,
                                                                             pipeOptions)));
#endif
#endif
#if NETFRAMEWORK
            return(new NamedPipeServerStreamFacade(new NamedPipeServerStream(pipeName,
                                                                             PipeDirection.InOut,
                                                                             NamedPipeServerStream.MaxAllowedServerInstances,
                                                                             PipeTransmissionMode.Message,
                                                                             pipeOptions,
                                                                             0,
                                                                             0,
                                                                             options.PipeSecurity)));
#endif
        }