Распространение заголовка не работает при использовании тестовых серверов
Я тестирую распространение заголовка.
Я установил два тестовых приложения: первое 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. Если что-то непонятно, дайте мне знать, постараюсь лучше объяснить. Спасибо за любые предложения!