Beispiel #1
0
 public override Task LegacyQuery(
     LegacyQueryRequest request,
     IServerStreamWriter <LegacyQueryResponse> responseStream,
     ServerCallContext context)
 {
     if (TryGetRetryAttempts(context, out int attempts) && attempts > 1)
     {
         this.SetResponseHeader(context.ResponseTrailers);
         byte[] bytes = new byte[] { 88, 99 };
         return(responseStream.WriteAsync(new LegacyQueryResponse()));
     }
     else
     {
         throw new RpcException(new Status(StatusCode.Unavailable, "Failing the request to test retry."), "failed for retry");
     }
 }
Beispiel #2
0
        public async Task TestsRetry()
        {
            ChannelOption[] channelOptions = new ChannelOption[]
            {
                new ChannelOption(
                    "grpc.service_config",
                    "{\"methodConfig\":[{\"name\":[{\"service\":\"Contoso.Grpc.LegacyQuery\",\"method\":\"LegacyQuery\"}],\"retryPolicy\":{\"maxAttempts\":3,\"initialBackoff\":\"0.5s\",\"maxBackoff\":\"5s\",\"backoffMultiplier\":2.0,\"retryableStatusCodes\":[\"UNAVAILABLE\"]}}]}")
            };

            Channel channel = new Channel($"{LocalHost}:{Port}", ChannelCredentials.Insecure, channelOptions);
            //Channel channel = new Channel($"{LocalHost}:{Port}", ChannelCredentials.Insecure);

            var client = new LegacyQuery.LegacyQueryClient(channel);

            byte[]             bytes = new byte[] { 55, 66 };
            LegacyQueryRequest legacyQueryRequest = new LegacyQueryRequest()
            {
                LegacyAqm = ByteString.CopyFrom(bytes)
            };

            LegacyQueryResponse response = null;

            try
            {
                var call = client.LegacyQuery(legacyQueryRequest);
                while (await call.ResponseStream.MoveNext().ConfigureAwait(false))
                {
                    response = call.ResponseStream.Current;
                }

                Assert.IsNotNull(response);
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.ToString());
                throw;
            }
#pragma warning disable CS1058 // A previous catch clause already catches all exceptions
            catch
#pragma warning restore CS1058 // A previous catch clause already catches all exceptions
            {
                // Remove the same permission as above.
                Console.WriteLine("Non-CLS compliant exception caught.");
            }
        }
Beispiel #3
0
        public override async Task LegacyQuery(
            LegacyQueryRequest request,
            IServerStreamWriter <LegacyQueryResponse> responseStream,
            ServerCallContext context)
        {
            if (request == null)
            {
                throw new ArgumentNullException(nameof(request));
            }

            if (context == null)
            {
                throw new ArgumentNullException(nameof(context));
            }

            int requestSize = request.CalculateSize();

            context.UserState.Add(RequestSizeKey, requestSize);

            await this.legacyQueryHandler.LegacyQuery(request, responseStream, context)
            .ConfigureAwait(false);
        }
 /// <summary>
 /// Abstract method for LegecyQuery gRpc request handling.
 /// </summary>
 /// <param name="request">The bytes from the LegacyQuery request.</param>
 /// <param name="responseStream">The stream writer to be used to write response stream to.</param>
 /// <param name="context">The gRpc service call context.</param>
 /// <returns>The task instance.</returns>
 public abstract Task LegacyQuery(
     LegacyQueryRequest request,
     IServerStreamWriter <LegacyQueryResponse> responseStream,
     ServerCallContext context);