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

Azure Blob上传部分文件报‘TLS版本不被允许’的排查与解决

排查与解决Azure Blob上传TLS版本错误问题

针对你遇到的同一函数上传不同文件结果不同、偶现TLS版本不被允许的问题,可按以下步骤排查解决:

  • 强制客户端使用指定TLS版本
    问题核心大概率是客户端TLS协商逻辑的差异:第一次上传inventory时,客户端自动协商到了存储账户要求的TLS版本(如1.2),连接池缓存了这个有效连接;直接上传sales时,新建立的连接用了旧版本TLS,被存储账户拒绝。
    解决时直接在代码中强制指定TLS 1.2:

    • 对于.NET Framework,在函数调用前添加:
      System.Net.ServicePointManager.SecurityProtocol = System.Net.SecurityProtocolType.Tls12;
      
    • 对于.NET Core/.NET 5+,需通过HttpClientHandler配置:
      var handler = new HttpClientHandler();
      handler.SslProtocols = System.Security.Authentication.SslProtocols.Tls12;
      var blobClientOptions = new BlobClientOptions { Transport = new HttpClientTransport(handler) };
      var blobServiceClient = new BlobServiceClient(yourConnectionString, blobClientOptions);
      
  • 检查文件大小引发的上传模式差异
    若sales文件比inventory大,Azure存储客户端会自动切换上传模式:小文件用单请求上传,大文件用分块上传。不同模式下的TLS握手逻辑可能存在隐性bug,导致分块上传时TLS版本不达标。
    可以强制统一上传模式,比如强制所有文件用分块上传,在UploadAsync时指定TransferOptions:

    await blobClient.UploadAsync(memoryStream, new BlobUploadOptions
    {
        TransferOptions = new StorageTransferOptions
        {
            MaximumConcurrency = 4,
            InitialTransferSize = 1024 * 1024 * 4 // 4MB分块
        }
    });
    
  • 升级Azure存储客户端库版本
    旧版本的Azure.Storage.Blobs(或旧的WindowsAzure.Storage)库存在TLS协商的兼容性问题,尤其是不同上传模式下的逻辑不一致。直接升级到最新稳定版本,能修复大部分这类隐性bug。

  • 排查连接池与本地网络问题
    本地系统的TLS缓存、代理或防火墙可能在第一次连接后才正确应用TLS 1.2规则。可以尝试重启应用进程,确保所有连接都使用新配置;暂时关闭代理或防火墙测试,排除网络拦截的影响。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 03:15:38