Beispiel #1
0
        private static async Task MakeServerStreamingCall(AllMethodsService.AllMethodsServiceClient client)
        {
            var deadline = DateTime.UtcNow.Add(TimeSpan.FromMinutes(1));

            var request = new AllMethodsRequest
            {
            };

            Console.WriteLine("starting call...");
            var call    = client.ServerStream(request, Metadata.Empty, deadline, CancellationToken.None);
            var headers = call.ResponseHeadersAsync;

            Console.WriteLine("got response headers: " + headers);

            Console.WriteLine("reading response stream...");
            await foreach (var m in call.ResponseStream.ReadAllAsync())
            {
                Console.WriteLine("read message: " + m);
            }
            Console.WriteLine("finished reading response stream.");

            var status = call.GetStatus();

            Console.WriteLine("read status: " + status);

            var trailers = call.GetTrailers();

            Console.WriteLine("read trailers: " + trailers);
        }
Beispiel #2
0
        public override async Task <AllMethodsResponse> Unary(AllMethodsRequest request, ServerCallContext context)
        {
            // by default, the server always writes some custom response headers
            if (!request.DisableSendingExampleResponseHeaders)
            {
                await context.WriteResponseHeadersAsync(new Metadata
                {
                    { "server-header", "server header value" },
                    { "server-header", "server header value duplicate" },
                    { "server-header-bin", Encoding.UTF8.GetBytes("server header binary value") },
                });
            }

            // always add some response trailers
            context.ResponseTrailers.Add("server-trailer", "server trailer value");
            context.ResponseTrailers.Add("server-trailer", "server trailer value duplicate");
            context.ResponseTrailers.Add("server-trailer-bin", Encoding.UTF8.GetBytes("server trailer binary value"));

            // wait for the requested amount of milliseconds
            await Task.Delay(request.PleaseDelayResponseMs);

            // are we requested to fail? set an error status or even throw
            switch (request.PleaseFail)
            {
            case FailRequest.MessageThenErrorStatus:
                context.Status = new Status(StatusCode.ResourceExhausted, "you requested an error");
                break;

            case FailRequest.ErrorStatusOnly:
                throw new RpcException(
                          new Status(StatusCode.ResourceExhausted, "you requested an error, no message"),
                          new Metadata
                {
                    { "server-trailer", "created by rpc exception on server" }
                }
                          );

            case FailRequest.None:
                context.Status = new Status(StatusCode.OK, "great!");
                break;
            }

            return(new AllMethodsResponse
            {
                Answer = $"You asked: {request.Question}",
                YourDeadline = context.Deadline.ToString(CultureInfo.InvariantCulture),
                YourRequestHeaders = { MetadataToMap(context.RequestHeaders) },
                YourFailRequest = request.PleaseFail,
            });
        }
Beispiel #3
0
        static void Main(string[] args)
        {
            AppContext.SetSwitch("System.Net.Http.SocketsHttpHandler.Http2UnencryptedSupport", true);
            var channel = GrpcChannel.ForAddress("http://localhost:5000", new GrpcChannelOptions());
            var client  = new AllMethodsService.AllMethodsServiceClient(channel);

            try
            {
                var deadline = DateTime.UtcNow.Add(TimeSpan.FromMinutes(1));
                var request  = new AllMethodsRequest
                {
                    PleaseFail = FailRequest.None
                };

                // MakeServerStreamingCall(client, deadline, request).GetAwaiter().GetResult();
                MakeUnaryCall(client, deadline, request).GetAwaiter().GetResult();
            }
            catch (Exception exception)
            {
                Console.WriteLine($"ERROR");
                Console.WriteLine($"{exception.Message}");
            }
        }
Beispiel #4
0
        private static async Task MakeUnaryCall(AllMethodsService.AllMethodsServiceClient client, DateTime deadline, AllMethodsRequest request)
        {
            Console.WriteLine("starting call...");
            var call    = client.UnaryAsync(request, Metadata.Empty, deadline, CancellationToken.None);
            var headers = await call.ResponseHeadersAsync;

            Console.WriteLine("got response headers: " + headers);

            Console.WriteLine("reading response...");
            var msg = await call.ResponseAsync;

            Console.WriteLine("got response message: " + msg);

            var status = call.GetStatus();

            Console.WriteLine("read status: " + status);

            var trailers = call.GetTrailers();

            Console.WriteLine("read trailers: " + trailers);
        }