问题描述
我正在测试标头传播。
我已经设置了两个测试应用程序:第一个 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 (将#修改为@)