AWSSDK .Net GetObjectAsync зависC#

Место общения программистов C#
Anonymous
AWSSDK .Net GetObjectAsync завис

Сообщение Anonymous »

Я пытаюсь взаимодействовать с пользовательским хранилищем S3, но часть методов AmazonS3Client зависает. Я нашел несколько сообщений с похожими проблемами, но они мне не помогли.
Изначально я объявил s3Client как приватное поле и застрял на методе GetFileMetadataAsync. В одном сообщении я нашел некоторую информацию о том, что создание нового клиента каждый раз может решить проблему, но это не помогло.
Затем я попытался вызвать GetObjectAsync, сначала вызов работает нормально и возвращает ошибку 404, затем в блоке catch я вызываю его второй раз, и в скрипаче я увидел ошибку 403, но GetObjectAsync завис и никогда не возвращает управление.
В окне потока я вижу, чего он ждет, Семапрхор.
Возможно, я неправильно настроил клиент? Но судя по примерам в документации, это не должно быть так уж сложно. В любом случае оно не должно зависать.
Изображение

_awsConfig = new AmazonS3Config
{
ServiceURL = serviceUrl.TrimEnd('/'),
ForcePathStyle = true,
UseHttp = serviceUrl.StartsWith("http://"),
MaxErrorRetry = _maxRetries,
RetryMode = RequestRetryMode.Standard,
AuthenticationRegion = ""

};

_awsCredentials = new BasicAWSCredentials(accessKey, secretKey);

public async Task DownloadFileAsync(string objectKey)
{

try
{
using var s3Client = new AmazonS3Client(_awsCredentials, _awsConfig);
var request = new GetObjectRequest
{
BucketName = _bucketName,
Key = objectKey
};

using var response = await s3Client.GetObjectAsync(request);
return response.ResponseStream;
}
catch (AmazonS3Exception ex) when (ex.StatusCode == System.Net.HttpStatusCode.NotFound)
{
if (objectKey.Contains("/"))
{
var fileName = objectKey.Substring(objectKey.IndexOf('/'));
var fallbackRequest = new GetObjectRequest
{
BucketName = _bucketName,
Key = fileName
};
using var s3Client = new AmazonS3Client(_awsCredentials, _awsConfig);
var response = await s3Client.GetObjectAsync(fallbackRequest);
return response.ResponseStream;
}

throw new Exception($"FileNotFound: {objectKey}", ex);
}
catch (AmazonS3Exception ex)
{
throw new Exception($"Error downloading file: {ex.Message}", ex);
}
}

Вернуться в «C#»