.net &引用;与服务器的连接异常终止";在EC2实例上上载到S3 TransferUtility.UploadAsync时
我得到的错误是:.net &引用;与服务器的连接异常终止";在EC2实例上上载到S3 TransferUtility.UploadAsync时,.net,amazon-s3,aws-sdk,asp.net-core-2.0,awss3transferutility,.net,Amazon S3,Aws Sdk,Asp.net Core 2.0,Awss3transferutility,我得到的错误是: The thread 0xffc has exited with code 0 (0x0). Exception thrown: 'System.IO.IOException' in System.Private.CoreLib.dll Exception thrown: 'System.IO.IOException' in Anjuna1.dll Exception thrown: 'System.IO.IOException' in System.Private.CoreL
The thread 0xffc has exited with code 0 (0x0).
Exception thrown: 'System.IO.IOException' in System.Private.CoreLib.dll
Exception thrown: 'System.IO.IOException' in Anjuna1.dll
Exception thrown: 'System.IO.IOException' in System.Private.CoreLib.dll
Microsoft.AspNetCore.Diagnostics.ExceptionHandlerMiddleware:Error: An unhandled exception has occurred: The write operation failed, see inner exception.
System.IO.IOException: The write operation failed, see inner exception. --->
System.Net.Http.WinHttpException: The connection with the server was
terminated abnormally
--- End of inner exception stack trace ---
在此处完成堆栈跟踪:
代码(.net core 2)如下所示:
private async Task S3UploadFileAsync(string fileName, Stream stream)
{
using (IAmazonS3 client = new AmazonS3Client(Amazon.RegionEndpoint.EUWest2))
{
var uploadRequest = new TransferUtilityUploadRequest
{
InputStream = stream,
BucketName = "******-*****",
CannedACL = S3CannedACL.AuthenticatedRead,
Key = fileName
};
TransferUtility fileTransferUtility = new TransferUtility(client);
try
{
await fileTransferUtility.UploadAsync(uploadRequest);
}
catch (System.Exception e)
{
throw e;
}
}
}
以上代码在我的本地计算机(Windows 10)上运行时效果良好,但在EC2实例(Windows Server 2016)上运行时效果不佳
我曾尝试公开S3存储桶,认为这是一个权限问题(仍然不起作用)
我认为这可能是windows防火墙或EC“实例安全组”的问题,因此我安装了AWS CLI,并可以使用它毫无问题地上传到S3实例
不管我上传什么,我都尝试过大的、小的甚至是空的文件
捕获异常需要大约30秒的时间,所以感觉好像有什么东西超时了。将代码更改为不存在的BucketName会导致相同的症状,让我觉得这与bucket配置无关(我已经标出了名称)
任何关于尝试的建议的帮助都将不胜感激-我已经为此工作了一整天,我的想法已经没有了…谢谢
更新:这里的类似错误表明它与权限相关:问题似乎与S3存储桶上的权限有关,如果我注释掉以下行,则上载工作正常:
CannedACL = S3CannedACL.AuthenticatedRead,
它仍然不是完美的,因为如果没有这一行,我的应用程序就无法下载刚刚上传的文件——但至少我现在知道该把精力放在哪里了
最终,这看起来像是AWS.NET SDK的一个问题,因为它没有提供更好的错误消息。我在这里提出了一个问题:
更新:通过将AmazonS3FullAccess策略添加到aws-elasticbeanstalk-ec2-role中,基本的权限问题最终得到了解决,正如这里的一条评论所建议的那样:我在使用ASP.NET Core 2.0应用程序将文件上载到S3时遇到了相同的问题,希望这对其他人有所帮助。 在我的例子中,异常的原因是AmazonS3Client的构造函数中的区域参数不正确。
var amazonS3Client = new AmazonS3Client(awsCredentials, Amazon.RegionEndpoint.USEast1);
因此,我同意问题作者的想法,即AWS.NET SDK没有提供格式良好的详细错误消息。我在尝试上载图像时遇到了相同的问题,我注释掉了以下行,上载成功:
CannedACL = S3CannedACL.PublicRead
在我的例子中,问题是bucket本身的访问权限,它不允许使用公共对象。我将其更新为允许使用公共对象。希望能有所帮助。更新部分挽救了我的一天:我获得了错误的密钥/密码组合。谢谢,伙计!错误消息肯定很糟糕。我的问题是错误的密钥/密码参数,而不是注册表ion…你是对的,我所在的地区是俄亥俄州,因此,我不得不使用Amazon.RegionEndpoint.USEast2