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

为HTTP瞬时异常实现Polly重试策略时遇到问题求助

Polly重试策略覆盖服务不可用/内部错误的解决方案

核心问题

你的getResponse有WCF和API两个实现,抛出的服务不可用、内部服务器错误对应的异常类型,不在当前策略的Handle范围内,因此无法触发重试。

分场景调整策略

1. 针对API实现的HTTP状态码异常

如果API实现通过HttpRequestException封装了HTTP状态码(500/503),需要在策略中增加状态码判断:

Policy.Handle<HttpRequestException>(ex => 
    ex.StatusCode == HttpStatusCode.ServiceUnavailable || 
    ex.StatusCode == HttpStatusCode.InternalServerError)
    .Or<TimeoutException>()
    .Or<BadRequestException>()
    .Retry(3); // 可按需修改重试次数

2. 针对WCF实现的自定义异常

如果WCF实现抛出的是自定义异常(比如ServiceNotAvailableException、InternalServerErrorException),直接将这些异常类型加入策略:

Policy.Handle<HttpRequestException>(ex => 
    ex.StatusCode == HttpStatusCode.ServiceUnavailable || 
    ex.StatusCode == HttpStatusCode.InternalServerError)
    .Or<TimeoutException>()
    .Or<BadRequestException>()
    .Or<ServiceNotAvailableException>() // WCF服务不可用异常
    .Or<InternalServerErrorException>() // WCF内部错误异常
    .Retry(3);

3. 兼容两种实现的通用写法

如果两个实现的异常没有统一类型,可通过异常消息关键词或通用筛选逻辑覆盖:

Policy.Handle<Exception>(ex => 
    // 匹配异常消息中的关键词
    ex.Message.Contains("serviceNotAvailable") || 
    ex.Message.Contains("Internal server error") ||
    // 保留原有需要重试的异常类型
    ex is TimeoutException || 
    ex is BadRequestException ||
    // 处理API的HTTP状态码异常
    (ex is HttpRequestException httpEx && 
        (httpEx.StatusCode == HttpStatusCode.ServiceUnavailable || 
         httpEx.StatusCode == HttpStatusCode.InternalServerError)))
    .Retry(3);

验证建议

分别触发WCF和API的服务不可用、内部错误场景,确认Polly能正常触发重试逻辑。

内容的提问来源于stack exchange,提问作者User123

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 09:42:43