我试图在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 的问题还是我的代码做错了什么。是什么原因造成的,或者有人知道解决方案吗?
想要完全一样的东西,却遇到了同样的问题。
这并不完美,但有一个解决方法:
结帐 https://github.com/aws/aws-sdk-net
你必须修补
Amazon.Runtime.Internal.Unmarshaller
private void Unmarshall(IExecutionContext executionContext)
HttpsResponse被放置在最后一个块中。如果你只是把它注释掉,你就又回到了业务中。
我认为这是旧的单声道运行时的问题,但我也不明白为什么这可以工作。但是因为我只想让它工作... :-)此外,GC 将清理响应对象,因此您甚至不会遇到麻烦。
顺便说一句:这真的很容易做到。只需查看项目。打开3.5版本。构建对我来说立即有效。所以这需要大约10分钟。