ASP.NET微服务中WCF SOAP服务健康检查委托未执行问题
问题解决:WCF SOAP服务HealthCheck委托未执行
问题根源
你当前用的AddUrlGroup重载参数顺序错了,导致最后那个配置HttpClient的委托没被正确识别,自然不会执行。
正确实现方式
要同时实现HEAD请求方法和动态配置HttpClient的BaseAddress,得用对应重载,把Uri生成、Http方法配置、健康检查参数按正确顺序传:
HealthCheckConfiguration healthCheckConfiguration = new(); configureHealthChecks.Invoke(healthCheckConfiguration); services .AddHealthChecks() .AddUrlGroup( // 生成目标Uri的委托 serviceProvider => { var config = serviceProvider.GetRequiredService<IOptionsMonitor<TSettings>>(); return new Uri($"{config.CurrentValue.Endpoint}?wsdl"); }, // 配置HEAD请求方法 uriOptions => uriOptions.UseHttpMethod(HttpMethod.Head), // 健康检查的其他配置参数 healthCheckConfiguration.Name, healthCheckConfiguration.FailureStatus, healthCheckConfiguration.Tags, healthCheckConfiguration.Timeout);
额外说明
如果需要给HttpClient加更多自定义配置(比如额外Header、调整超时),可以用带HttpClient配置委托的重载,注意参数顺序别乱:
services .AddHealthChecks() .AddUrlGroup( serviceProvider => { var config = serviceProvider.GetRequiredService<IOptionsMonitor<TSettings>>(); return new Uri($"{config.CurrentValue.Endpoint}?wsdl"); }, uriOptions => uriOptions.UseHttpMethod(HttpMethod.Head), healthCheckConfiguration.Name, healthCheckConfiguration.FailureStatus, healthCheckConfiguration.Tags, healthCheckConfiguration.Timeout, // 这里的HttpClient配置委托会被正常执行 (serviceProvider, httpClient) => { // 可添加自定义HttpClient逻辑,比如添加请求头 // httpClient.DefaultRequestHeaders.Add("X-Custom-Header", "HealthCheck"); });
核心就是要匹配AddUrlGroup的重载签名,参数顺序不对的话,编译器会把你的委托绑定到错误的参数位置,导致逻辑不触发。
内容的提问来源于stack exchange,提问作者Lucho Gizdov
相关产品推荐
相关产品推荐

