You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 19:32:13