Пример #1
0
        static async Task Main(string[] args)
        {
            var channel = GrpcChannel.ForAddress("https://localhost:5001");
            var client  = new Aggregator.AggregatorClient(channel);

            await ServerStreamingCallExample(client);

            await ClientStreamingCallExample(client);

            Console.WriteLine("Press any key to exit...");
            Console.ReadKey();
        }
        private static async Task ClientStreamingCallExample(Aggregator.AggregatorClient client)
        {
            using var call = client.AccumulateCount();
            for (var i = 0; i < 3; i++)
            {
                var count = Random.Next(5);
                Console.WriteLine($"Accumulating with {count}");
                await call.RequestStream.WriteAsync(new CounterRequest { Count = count });

                await Task.Delay(2000);
            }

            await call.RequestStream.CompleteAsync();

            var response = await call;

            Console.WriteLine($"Count: {response.Count}");
        }
        private static async Task ServerStreamingCallExample(Aggregator.AggregatorClient client)
        {
            var cts = new CancellationTokenSource();

            cts.CancelAfter(TimeSpan.FromSeconds(3.5));

            using var call = client.SayHellos(new HelloRequest { Name = "AggregatorClient" }, cancellationToken: cts.Token);
            try
            {
                await foreach (var message in call.ResponseStream.ReadAllAsync())
                {
                    Console.WriteLine("Greeting: " + message.Message);
                }
            }
            catch (RpcException ex) when(ex.StatusCode == StatusCode.Cancelled)
            {
                Console.WriteLine("Stream cancelled.");
            }
        }
Пример #4
0
        private static async Task ServerStreamingCallExample(Aggregator.AggregatorClient client)
        {
            var cts = new CancellationTokenSource();

            cts.CancelAfter(TimeSpan.FromSeconds(3.5));

            using (var replies = client.SayHellos(new HelloRequest {
                Name = "AggregatorClient"
            }, cancellationToken: cts.Token))
            {
                try
                {
                    while (await replies.ResponseStream.MoveNext(cts.Token))
                    {
                        Console.WriteLine("Greeting: " + replies.ResponseStream.Current.Message);
                    }
                }
                catch (RpcException ex) when(ex.StatusCode == StatusCode.Cancelled)
                {
                    Console.WriteLine("Stream cancelled.");
                }
            }
        }
Пример #5
0
        public static async Task AggregatorServerStreamingCallExample(Aggregator.AggregatorClient client)
        {
            var cts = new CancellationTokenSource();

            cts.CancelAfter(TimeSpan.FromSeconds(3.0));

            using (var replies = client.SayHellos(new HelloRequest {
                Name = "张三"
            }, cancellationToken: cts.Token))
            {
                try
                {
                    await foreach (var reply in replies.ResponseStream.ReadAllAsync())
                    {
                        Console.WriteLine($"Greeting:{reply.Message}");
                    }
                }
                catch (RpcException ex) when(ex.StatusCode == StatusCode.Cancelled)
                {
                    Console.WriteLine("Stream cancelled.");
                }
            }
        }
Пример #6
0
        static async Task Main(string[] args)
        {
            // 为客户端配置选项
            // 更多配置见:https://docs.microsoft.com/zh-cn/aspnet/core/grpc/configuration?view=aspnetcore-3.0#configure-client-options
            var channel = GrpcChannel.ForAddress("https://localhost:5001", new GrpcChannelOptions
            {
                MaxReceiveMessageSize = 5 * 1024 * 1024, // 5MB
                MaxSendMessageSize    = 2 * 1024 * 1024  // 2MB
            });


            var clientGreeter = new Greeter.GreeterClient(channel);
            var clientCounter = new Counter.CounterClient(channel);
            //var clientRacer = new Racer.RacerClient(channel);
            var clientAggregator = new Aggregator.AggregatorClient(channel);

            //await UnaryStreamCallExample(clientGreeter);
            //await ServerStreamingCallExample(clientGreeter);
            //await ClientStreamingCallExample(clientCounter);
            //await BidirectionalStreamingExample(clientRacer);
            await AggregatorServerStreamingCallExample(clientAggregator);

            Console.ReadLine();
        }