Политика Polly повторения прикреплена, но не запускается при сбое HTTPClient в .NET 9C#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Политика Polly повторения прикреплена, но не запускается при сбое HTTPClient в .NET 9

Сообщение Anonymous »

В моем проекте ASP.NET Core 9 Web API я интегрирую политики Polly Retry и схемы выключателя для типичных httpclient . Однако после того, как я настраиваю все через addhttpclient () , политика повторной попытки, похоже, не применяется, когда фактический HTTP -запрос не выполняется (например, сетевые проблемы или тайм -ауты).
Вот как я реализую свой подход - это то, как я настраиваю ConfigureryPolicies () Метод:

Код: Выделить всё

public static void ConfigureRetryPolicies(this IServiceCollection services, IConfiguration configuration)
{
var options = configuration.GetSection("VoucherifyVoucherProvider").Get();

services.AddHttpClient(client =>
{
client.BaseAddress = new Uri(options.BaseUrl);
client.Timeout = TimeSpan.FromSeconds(30);
client.DefaultRequestHeaders.Add("X-App-Token", options.AppToken);
client.DefaultRequestHeaders.Add("X-App-Id", options.AppId);
})
.AddPolicyHandler(GetComprehensiveRetryPolicy("Voucherify"))
.AddPolicyHandler(GetCircuitBreakerPolicy("Voucherify"));

// Register IVoucherProvider using typed client
services.AddScoped(sp =>
sp.GetRequiredService());
}
< /code>
реализация политики повторной попытки: < /p>
private static IAsyncPolicy GetComprehensiveRetryPolicy(string providerName)
{
return Policy
.Handle()
.Or()
.OrResult(r => !r.IsSuccessStatusCode)
.WaitAndRetryAsync(3, retryAttempt => TimeSpan.FromSeconds(2),
(outcome, timespan, retryCount, context) =>
{
Console.WriteLine($"[POLLY] Retry {retryCount} for {providerName}: {outcome.Exception?.Message ?? outcome.Result?.StatusCode.ToString()}");
});
}
< /code>
Класс поставщика ваучеров: < /p>
public class VoucherifyVoucherProvider : BaseVoucherProvider
{
private readonly HttpClient _httpClient;
private readonly VoucherifyProviderOptions _options;

public VoucherifyVoucherProvider(ILogger logger,
HttpClient httpClient,
IOptions options) : base(logger)
{
_httpClient = httpClient;
_options = options.Value;
}

public async Task RedeemVoucherAsync(...) {
var response = await _httpClient.PostAsJsonAsync("/v1/redeem", requestData);
response.EnsureSuccessStatusCode();
...
}
}
Я хотел попробовать это решение, поэтому я моделирую сбой сети, выключив мою сеть Wi -Fi, но политика повторной попытки не запускается.

Код: Выделить всё

var field = typeof(HttpMessageInvoker).GetField("_handler", BindingFlags.NonPublic | BindingFlags.Instance);
var handler = field?.GetValue(_httpClient);

while (handler is DelegatingHandler delegatingHandler)
{
Console.WriteLine(handler.GetType().FullName);
handler = delegatingHandler.InnerHandler;
}
А вывод показывает:

Почему не запускает политику Retry, когда запрашивается (E.G. Sue A Seight Of A Skey Skee Of A Skee To A Skey.>

Подробнее здесь: https://stackoverflow.com/questions/796 ... e-in-net-9
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • C# Polly, Polly не работает, если функция завершится
    Anonymous » » в форуме C#
    0 Ответы
    20 Просмотры
    Последнее сообщение Anonymous
  • Политика Polly Retry блокирует или ждет успеха
    Anonymous » » в форуме C#
    0 Ответы
    38 Просмотры
    Последнее сообщение Anonymous
  • Политика тайм-аута Polly не активирована
    Anonymous » » в форуме C#
    0 Ответы
    16 Просмотры
    Последнее сообщение Anonymous
  • Политика тайм-аута Polly не активирована
    Anonymous » » в форуме C#
    0 Ответы
    15 Просмотры
    Последнее сообщение Anonymous
  • Политика тайм-аута Polly не активирована
    Anonymous » » в форуме C#
    0 Ответы
    18 Просмотры
    Последнее сообщение Anonymous

Вернуться в «C#»