提问者:小点点

Unity3D中AWS ListBuckets调用上的ObjectDisposedException


我试图在Unity3D游戏中使用AWS.NET SDK。我已经使用了3.5 dll,我正在我的项目中使用它。为了测试它是否正常工作,我只是尝试列出所有可用的存储桶,我使用Cloudberry检查了所有凭据和权限是否正确,因此这应该不是问题。

引发的异常:

ObjectDisposedException:对象在被处置后被使用。System.Net。HttpWebResponse. CheckDispose()System.Net。HttpWebResponse.GetResseHeader(System.String HeaderName)(包装远程调用-调用-检查)System.Net。HttpWebResponse:GetResseHeader(string)Amazon.Runtime.Interner.Transform.HttpWebRequestResseData.GetHeaderValue(System.String name)Amazon.S3。内部。Amazon onS3ResseHandler.HasSSEHeaders(IWebResseData webResseData)Amazon.S3。内部。Amazon onS3ResseHandler.ProcessResHandler(IExecutionContext执行上下文)Amazon.S3。内部。Amazon.

单步执行代码后,错误似乎出现在读取 var res = 客户端的行上。ListBuckets();.下面是正在使用的代码。

public class FileStorage
{
    private const string accessKey = @"access_key";
    private const string secretKey = @"secret_key";
    private const string bucketName = @"bucket_name";

    private AmazonS3Client client;
    private AmazonS3Config config;

    public FileStorage()
    {
        config = new AmazonS3Config
        {
            ServiceURL = "http://s3.amazonaws.com"
        };
    }

    public void ListBuckets()
    {
        var client = new AmazonS3Client(accessKey, secretKey, config);
        var res = client.ListBuckets();
        foreach (S3Bucket b in res.Buckets)
        {
            Debug.Log(b.BucketName);
        }
    }
}

我已经取出了这个类,并将其放入运行 .NET 3.5 的 Visual Studio 项目中进行测试,它运行良好,并列出了我期望的所有存储桶。

该错误感觉相当无用,所以我不确定这是库和 Unity 的问题还是我的代码做错了什么。是什么原因造成的,或者有人知道解决方案吗?


共1个答案

匿名用户

想要完全一样的东西,却遇到了同样的问题。

这并不完美,但有一个解决方法:

结帐 https://github.com/aws/aws-sdk-net

你必须修补

  Amazon.Runtime.Internal.Unmarshaller
      private void Unmarshall(IExecutionContext executionContext)

HttpsResponse被放置在最后一个块中。如果你只是把它注释掉,你就又回到了业务中。

我认为这是旧的单声道运行时的问题,但我也不明白为什么这可以工作。但是因为我只想让它工作... :-)此外,GC 将清理响应对象,因此您甚至不会遇到麻烦。

顺便说一句:这真的很容易做到。只需查看项目。打开3.5版本。构建对我来说立即有效。所以这需要大约10分钟。