使用测试服务器时标头传播不起作用

问题描述

我正在测试标头传播。
我已经设置了两个测试应用程序:第一个 WebCallerApp 和第二个 WebCalleeApp。当我手动测试时,我将 get 请求发送到 WebCallerApp,然后 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 上的第一篇文章。如果有不清楚的地方,请告诉我,我会尽量解释得更好。感谢您的任何建议!

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)