protected override async Task ExecuteAsync(IServiceProvider provider, CancellationToken cancellationToken) { var configurationRepository = provider.GetRequiredService <ITokenConfigurationRepository>(); var configurationService = provider.GetRequiredService <ITokenConfigurationService>(); var config = provider.GetRequiredService <IAuthorityClientConfig>(); Task <TokenConfigurationModel> Operation(ILoggingContext context, CancellationToken cancellationToken) { return(configurationService.GetAsync(config.AuthorityUrl, context, cancellationToken)); } var operationConfig = new RetryOperationConfig { RetryCount = configurationRepository.IsSet() ? 3 : (int?)null, RetryPolicy = new RetryPolicy(TimeSpan.FromSeconds(30), 2), SameExceptions = SameExceptions }; using (fLogger.TrackDependency(fContext, "REST", "Token configuration service loading.", RoleNames._AuthorityService, string.Empty, out var trackingContext)) { await new RetryOperation <TokenConfigurationModel>(Operation, operationConfig) .Catch <TokenConfigurationModel, HttpRequestException>(fLogger) .Catch <TokenConfigurationModel, Exception>(fLogger, true) .OnFail(trackingContext) .OnFail(fLogger, "Unable to load authority configuration. Signing key may be deprecated!") .OnSuccess(trackingContext) .OnSuccess(fLogger, "Loaded new authority configuration.") .OnSuccess((result, _) => configurationRepository.Set(result)) .ExecuteAsync(trackingContext, cancellationToken); } }
private async Task AuthorizeConnectionAsync(ILoggingContext context, CancellationToken cancellationToken) { async Task Operation(ILoggingContext context, CancellationToken cancellationToken) { await LoginAsync(fConfig.ClientId, fConfig.ClientSecret, context, cancellationToken); await SubscribeResourcesAsync(fConfig.SubscribedResources, context, cancellationToken); } var operationConfig = new RetryOperationConfig { RetryCount = null, RetryPolicy = new Operations.RetryPolicy(TimeSpan.FromSeconds(60), 2) }; using (fLogger.TrackRequest(context, "Authorizing SignalR connection.", out var requestContext)) { await new RetryOperation(Operation, operationConfig) .Catch <Unit, HttpRequestException>(fLogger) .Catch <Unit, WebSocketException>(fLogger) .Catch <Unit, HubException>(fLogger) .Catch <Unit, Exception>(fLogger, true) .OnSuccess(requestContext) .OnFail(requestContext) .OnFailRethrow() .ExecuteAsync(requestContext, cancellationToken); } }
public async Task InitialConnectAsync(HubConnection hubConnection, Uri signalUrl, ILoggingContext context, CancellationToken cancellationToken) { var config = new RetryOperationConfig { RetryCount = null, RetryPolicy = new RetryPolicy(TimeSpan.FromSeconds(60), 2), SameExceptions = SameExceptions }; await new RetryOperation((_, cancellationToken) => hubConnection.StartAsync(cancellationToken), config) .Catch <Unit, WebSocketException>(fLogger) .Catch <Unit, Exception>(fLogger, true) .OnRetryInformation(fLogger, $"Retrying to connect to '{signalUrl}' ...") .OnSuccess(fLogger, $"Successfuly connected to '{signalUrl}'.") .OnFail(fLogger, $"Unable to connect to '{signalUrl}'.") .OnFailRethrow() .ExecuteAsync(context, cancellationToken); }