async Task <TResponse> ExecAsync <TResponse>(AsyncUnaryCall <TResponse> auc, Func <AsyncUnaryCall <TResponse> > fn) { var(response, status, headers) = await GrpcUtils.GetResponseAsync(Config, auc); if (status?.ErrorCode != null) { var callInvoker = Config.Channel.CreateCallInvoker(); if (await client.RetryRequest(Config, auc.GetStatus().StatusCode, status, callInvoker)) { using var retryAuc = fn(); var(retryResponse, retryStatus, retryHeaders) = await GrpcUtils.GetResponseAsync(Config, retryAuc); if (retryStatus?.ErrorCode == null) { return(retryResponse); } } throw new WebServiceException(status.Message) { StatusCode = ResponseCallContext.GetHttpStatus(headers), ResponseDto = response as object ?? new ServiceStack.EmptyResponse { ResponseStatus = status }, ResponseHeaders = GrpcUtils.ResolveHeaders(headers), State = auc.GetStatus(), }; } return(response); }
ClientInterceptorContext <TRequest, TResponse> CreateContext <TRequest, TResponse>( TRequest requestDto, ClientInterceptorContext <TRequest, TResponse> context) where TRequest : class where TResponse : class { var authIncluded = GrpcUtils.InitRequestDto(Config, requestDto); var options = context.Options.Init(Config, noAuth: authIncluded); return(new ClientInterceptorContext <TRequest, TResponse>(context.Method, context.Host, options)); }