У меня есть приложение ASP.NET Core 2.1, и я получаю сообщение об ошибке:
Невозможно получить доступ к удаленному объекту.
Имя объекта: 'Amazon.S3.AmazonS3Client'
при попытке вызвать сервис чтения объектов AWS S3. Эта служба работает в первый раз и не работает во второй и последующие разы.
У меня в файле startup.cs следующее:
services.AddSingleton<IAWSService, AWSService>();
services.AddAWSService<IAmazonS3>();
(Я пытался настроить AsScoped () безрезультатно.)
Эта функция вызывает проблемы:
public class AWSService : IAWSService
{
private readonly IAmazonS3 _s3Client;
public AWSService(IAmazonS3 s3Client)
{
_s3Client = s3Client;
}
public async Task<byte[]> ReadObjectFromS3Async(string bucketName, string keyName)
{
try
{
GetObjectRequest request = new GetObjectRequest
{
BucketName = bucketName,
Key = keyName
};
using (_s3Client)
{
MemoryStream ms = new MemoryStream();
using (var getObjectResponse = await _s3Client.GetObjectAsync(request))
{
getObjectResponse.ResponseStream.CopyTo(ms);
}
var download = new FileContentResult(ms.ToArray(), "application/pdf");
return download.FileContents;
}
}
catch (AmazonS3Exception e)
{
Console.WriteLine("Error encountered ***. Message:'{0}' when writing an object", e.Message);
}
catch (Exception e)
{
Console.WriteLine("Unknown encountered on server. Message:'{0}' when writing an object", e.Message);
}
return null;
}
}
}
При первом запуске функции точка останова показывает, что этот клиент.s3 не удаляется, однако последующие попытки запустить эту функцию показывают, что клиент s3 удаляется, поэтому возникает ошибка.
Обновление
Я вызываю эту функцию из контроллера:
public class CorrespondenceItemController : Controller
{
private IAWSService _awsService;
public CorrespondenceItemController(IAWSService aWSService)
{
_awsService = aWSService;
}
public async Task<ActionResult<dynamic>> Send([FromBody]CorrespondenceItemSendViewModel model)
{
var attachment = await _awsService.ReadObjectFromS3Async(bucket, key)
}
}