Распространение заголовка не работает при использовании тестовых серверов

Я тестирую распространение заголовка.
Я установил два тестовых приложения: первое WebCallerApp и второе WebCalleeApp. Когда я тестирую его вручную, я отправляю запрос на получение в WebCallerApp, который затем отправляет запрос в WebCalleApp - проверяя журналы, я могу увидеть, имеют ли оба запроса одинаковое значение заголовка.
Пытался автоматизировать с помощью xunit:

          public class HeaderPropagation_Tests
{
    private HttpClient _webCallerAppClient;
    private HttpClient _webCalleeApClient;
    public HeaderPropagation_Tests()
    {
        var webCalleeApp = new WebHostBuilder()
            .UseStartup<WebCalleeApp.Startup>();

        var webCalleeAppServer = new TestServer(webCalleeApp);

        var webCalleClientFactory = Substitute.For<IHttpClientFactory>();
        _webCalleeApClient = webCalleeAppServer.CreateClient();

        webCalleClientFactory.CreateClient().Returns(_webCalleeApClient);

        var webCallerApp = new WebHostBuilder()
            .UseStartup<WebCallerApp.Startup>()
            .ConfigureServices(s =>
            {
                s.AddSingleton(x => webCalleClientFactory);
            });

        var webCallerAppServer = new TestServer(webCallerApp);
        _webCallerAppClient = webCallerAppServer.CreateClient();
    }

При запуске WebCallerApp у меня есть следующее:
      public void ConfigureServices(IServiceCollection services)
    {
        services.AddControllers();
        services.AddHttpClient();
        services.AddHeaderPropagation(o => {
            o.HeaderNames.Add("x-correlation-id");
        });
    }

В такой конфигурации первый контроллер может отправлять запрос второму контроллеру, однако, похоже, он использует HttpClient, который не заключен в AddHeaderPropagation.

Я обнаружил, что когда я комментирую s.AddSingleton(x => webCalleClientFactory); из

      var webCallerApp = new WebHostBuilder()
            .UseStartup<WebCallerApp.Startup>()
            .ConfigureServices(s =>
            {
                s.AddSingleton(x => webCalleClientFactory);
            });

тогда первый контроллер фактически добавляет заголовок к запросу, но он не может подключиться ко второму контроллеру, я получаю сообщение: Невозможно установить соединение, потому что целевая машина активно отказалась от него.
Мне очень жаль, если мой вопрос трудно понять, на самом деле это мой первый пост на StackOverflow. Если что-то непонятно, дайте мне знать, постараюсь лучше объяснить. Спасибо за любые предложения!

0 ответов

Другие вопросы по тегам