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

Azure Blob Storage PUT请求无结果码的Application Insights依赖失败求助

问题分析与处理思路

状态码「undefined/unknown」的可能原因

  • 请求中途中断:第一个PUT请求可能在发送过程中遭遇网络波动、TCP连接重置或客户端超时,导致未收到Blob Storage的响应,Application Insights因无法捕获状态码,便标记为undefined/unknown,同时将Call status设为false。
  • SDK捕获逻辑缺陷:若使用Azure SDK或自定义遥测代码,可能在请求失败场景下未正确捕获并上报响应状态码,比如异常抛出后未处理遥测数据的填充逻辑。
  • Storage端静默中断:极少数情况下,Blob Storage服务处理请求时出现内部异常但未返回响应,直接关闭连接,导致客户端无状态码可获取。

重复请求成功的逻辑验证

这种“失败后立即成功”的情况,大概率是客户端重试机制在起作用:你的API或底层Blob Storage客户端SDK默认开启了重试策略,当第一次请求无响应失败时,自动发起参数完全相同的重试请求,最终成功拿到201状态码(资源创建成功)。

处理步骤建议

  1. 核查重试配置:确认Blob Storage客户端SDK的重试策略(如重试次数、间隔、触发条件)是否符合预期;如果是自定义重试逻辑,排查是否会在无响应场景下触发重试。
  2. 补充遥测细节:在代码中添加更详细的遥测日志,捕获请求阶段的异常信息(如SocketException、TaskCanceledException),并将这些信息附加到依赖项遥测的properties中,方便定位具体失败原因。
    // 示例:在Blob PUT请求的异常处理中补充自定义遥测
    try
    {
        await blobClient.UploadAsync(content);
    }
    catch (Exception ex)
    {
        var telemetry = new DependencyTelemetry
        {
            Name = "Blob PUT",
            Target = blobClient.Uri.Host,
            Data = blobClient.Uri.ToString(),
            Success = false
        };
        telemetry.Properties.Add("ExceptionType", ex.GetType().Name);
        telemetry.Properties.Add("ExceptionMessage", ex.Message);
        _telemetryClient.TrackDependency(telemetry);
        throw;
    }
    
  3. 排查网络环境:检查应用服务器到Blob Storage的网络连通性,确认是否存在间歇性丢包、防火墙规则变更、代理超时等问题;可借助Azure Monitor的网络诊断工具查看Storage账户的入站请求状态。
  4. 升级SDK版本:若使用自动遥测采集,确认SDK是否为最新版本——旧版本可能存在状态码捕获不全的bug,升级后观察问题是否复现。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 17:53:15