コード例 #1
0
        private IReadOnlyList <Endpoint> MapEndpoints <TService>()
            where TService : class
        {
            var serviceCollection = new ServiceCollection();

            serviceCollection.AddLogging();
            serviceCollection.AddGrpc();
            serviceCollection.RemoveAll(typeof(IServiceMethodProvider <>));
            serviceCollection.TryAddEnumerable(ServiceDescriptor.Singleton(typeof(IServiceMethodProvider <>), typeof(HttpApiServiceMethodProvider <>)));

            IEndpointRouteBuilder endpointRouteBuilder = new TestEndpointRouteBuilder(serviceCollection.BuildServiceProvider());

            endpointRouteBuilder.MapGrpcService <TService>();

            return(endpointRouteBuilder.DataSources.Single().Endpoints);
        }
    private IReadOnlyList <Endpoint> MapEndpoints <TService>(Action <ILoggingBuilder>?configureLogging = null)
        where TService : class
    {
        var serviceCollection = new ServiceCollection();

        serviceCollection.AddLogging(log =>
        {
            configureLogging?.Invoke(log);
        });
        serviceCollection.AddGrpc();
        serviceCollection.RemoveAll(typeof(IServiceMethodProvider <>));
        serviceCollection.TryAddEnumerable(ServiceDescriptor.Singleton(typeof(IServiceMethodProvider <>), typeof(JsonTranscodingServiceMethodProvider <>)));

        IEndpointRouteBuilder endpointRouteBuilder = new TestEndpointRouteBuilder(serviceCollection.BuildServiceProvider());

        endpointRouteBuilder.MapGrpcService <TService>();

        return(endpointRouteBuilder.DataSources.Single().Endpoints);
    }
コード例 #3
0
        public async Task Create_ConfiguredGrpcEndpoint_EndpointReturnedFromReflectionService()
        {
            // Arrange
            var endpointRouteBuilder = new TestEndpointRouteBuilder();

            var services = ServicesHelpers.CreateServices();

            services.AddGrpcReflection();
            services.AddRouting();
            services.AddSingleton <EndpointDataSource>(s =>
            {
                return(new CompositeEndpointDataSource(endpointRouteBuilder.DataSources));
            });

            var serviceProvider = services.BuildServiceProvider(validateScopes: true);

            endpointRouteBuilder.ServiceProvider = serviceProvider;
            endpointRouteBuilder.MapGrpcService <GreeterService>();

            // Act
            var service = serviceProvider.GetRequiredService <ReflectionServiceImpl>();

            var reader = new TestAsyncStreamReader
            {
                Current = new ServerReflectionRequest
                {
                    ListServices = "" // list all services
                }
            };
            var writer  = new TestServerStreamWriter <ServerReflectionResponse>();
            var context = HttpContextServerCallContextHelper.CreateServerCallContext();

            await service.ServerReflectionInfo(reader, writer, context);

            // Assert
            Assert.AreEqual(1, writer.Responses.Count);
            Assert.AreEqual(1, writer.Responses[0].ListServicesResponse.Service.Count);

            var serviceResponse = writer.Responses[0].ListServicesResponse.Service[0];

            Assert.AreEqual("greet.Greeter", serviceResponse.Name);
        }
コード例 #4
0
        public async Task Create_ConfiguredGrpcEndpoint_EndpointReturnedFromReflectionService()
        {
            // Arrange
            var services = new ServiceCollection();

            services.AddGrpc();
            services.AddLogging();
            var serviceProvider = services.BuildServiceProvider();

            var endpointRouteBuilder = new TestEndpointRouteBuilder(serviceProvider);

            endpointRouteBuilder.MapGrpcService <GreeterService>();

            var dataSource = new CompositeEndpointDataSource(endpointRouteBuilder.DataSources);

            var activator = new ReflectionGrpcServiceActivator(dataSource, NullLoggerFactory.Instance);

            // Act
            var service = activator.Create();

            var reader = new TestAsyncStreamReader
            {
                Current = new ServerReflectionRequest
                {
                    ListServices = "" // list all services
                }
            };
            var writer  = new TestServerStreamWriter();
            var context = HttpContextServerCallContextHelper.CreateServerCallContext();

            await service.ServerReflectionInfo(reader, writer, context);

            // Assert
            Assert.AreEqual(1, writer.Responses.Count);
            Assert.AreEqual(1, writer.Responses[0].ListServicesResponse.Service.Count);

            var serviceResponse = writer.Responses[0].ListServicesResponse.Service[0];

            Assert.AreEqual("Greet.Greeter", serviceResponse.Name);
        }
コード例 #5
0
        private static async Task <TestServerStreamWriter <ServerReflectionResponse> > ConfigureReflectionServerAndCallAsync(Action <IEndpointRouteBuilder> action)
        {
            // Arrange
            var endpointRouteBuilder = new TestEndpointRouteBuilder();

            var services = ServicesHelpers.CreateServices();

            services.AddGrpcReflection();
            services.AddRouting();
            services.AddSingleton <EndpointDataSource>(s =>
            {
                return(new CompositeEndpointDataSource(endpointRouteBuilder.DataSources));
            });

            var serviceProvider = services.BuildServiceProvider(validateScopes: true);

            endpointRouteBuilder.ServiceProvider = serviceProvider;

            action(endpointRouteBuilder);

            // Act
            var service = serviceProvider.GetRequiredService <ReflectionServiceImpl>();

            var reader = new TestAsyncStreamReader
            {
                Current = new ServerReflectionRequest
                {
                    ListServices = "" // list all services
                }
            };
            var writer  = new TestServerStreamWriter <ServerReflectionResponse>();
            var context = HttpContextServerCallContextHelper.CreateServerCallContext();

            await service.ServerReflectionInfo(reader, writer, context);

            return(writer);
        }