You need to enable JavaScript to run this app. Unity(C#)尝试连接Azure时抛出NotImplementedException问题求助
优惠活动
大模型
产品
解决方案
定价
更多

Unity(C#)尝试连接Azure时抛出NotImplementedException问题求助

错误根因

你遇到的报错是Unity 2019版本自带的Mono运行时对System.Net.Http.HttpClientHandler的实现不全,MaxConnectionsPerServer属性未做实现,而你使用的Azure Storage Blob SDK在初始化默认传输链路时会主动调用该属性,因此仅在Unity环境触发异常,在标准.NET控制台环境运行正常。

修复方案

  • 方案1:自定义Azure SDK传输链路,绕开默认实现
    修改你的DLL代码,手动构造HttpClientTransport,避免SDK自动调用未实现的属性:
using Azure.Core.Pipeline;
using Azure.Storage.Blobs;

public class UnityToAzureConnection
{
    private readonly static string m_connectionString = "CENSORED";

    // 注意把async void改成async Task,避免Unity异步吞异常
    public static async Task CreateConnection(string _path, string _fileName)
    {
        // 手动构造HttpClientHandler,不依赖SDK的默认创建逻辑
        var handler = new HttpClientHandler();
        var client = new HttpClient(handler);
        var transport = new HttpClientTransport(client);
        
        // 配置BlobClientOptions使用自定义传输
        var options = new BlobClientOptions()
        {
            Transport = transport
        };
        
        BlobServiceClient blobServiceClient = new BlobServiceClient(m_connectionString, options);
        // 容器名必须全小写,符合Azure命名规范
        BlobContainerClient containerClient = await blobServiceClient.CreateBlobContainerAsync("imagetest");

        BlobClient blobClient = containerClient.GetBlobClient(_fileName);
        using (FileStream _fs = File.Open(Path.Combine(_path, _fileName), FileMode.Open))
        {
            await blobClient.UploadAsync(_fs, true);
        }
    }
}

调用该方法时如果是在Unity生命周期内,可通过协程包裹异步等待逻辑执行,避免主线程阻塞。

  • 方案2:调整Unity Player配置
    打开Unity编辑器的Edit > Project Settings > Player > Other Settings,修改以下配置:

    • 将Api Compatibility Level设置为.NET 4.x
    • 将Http Implementation从默认的UnityWebRequest改为.NET Core
      修改后重新导入依赖DLL即可。
  • 方案3:降级Azure Storage SDK版本
    如果上述方案不生效,可将你DLL引用的Azure.Storage.Blobs包降级到12.2.0以下的版本,或者替换为旧版Microsoft.Azure.Storage.Blob包,该版本系列对Unity旧Mono运行时兼容性更好。

额外注意事项

  • Unity环境下不要使用async void定义异步方法,未捕获的异常会直接被静默吞掉,排查难度极高,统一改为async Task返回值。
  • Azure Blob容器名必须全小写、不能包含特殊字符,不符合规范的命名会在运行时抛出额外异常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.18 21:54:00