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"); } }
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."); } }
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);