Недавно я опубликовал вопрос о приложении с таймером ( C # FileStream в Mono - нарушение обмена файлами ).
При событии таймера он проверяет файлы в папке и пытается загрузить их в корзину S3.Когда я не был подключен к Интернету (для проверки работоспособности в автономном режиме), я получал исключения из-за нарушения прав доступа, поскольку мой интервал таймера был меньше, чем время ожидания для S3 PutObjectRequest.Поэтому второе событие таймера не может получить доступ к файлу, поскольку оно все еще задерживается первым PutObjectRequest, время которого еще не истекло.Я решил эту проблему, увеличив интервал таймера после таймаута PutObjectRequest.
Когда я запускаю одно и то же приложение на Raspbian (с Mono), без интернета, PutObjectRequest никогда не прерывается или не возвращается.Таким образом, я снова получаю исходное нарушение прав доступа.Код ниже показывает метод, который делает запрос Put.Как вы можете видеть, я также попытался сократить время ожидания до 10 секунд и только одну попытку.Без разницы.
static async Task<bool> WritingCSVFileToS3Async(FileInfo file)
{
try
{
ErrorLogging.LogMessageToFile("Trying to write csv file to S3.");
// using (client = new AmazonS3Client(bucketRegion))
//using (client = new AmazonS3Client(new AmazonS3Config { Timeout = TimeSpan.FromSeconds(10), MaxErrorRetry = 1, RegionEndpoint = bucketRegion, ThrottleRetries = false }))
{
// Put the object-set ContentType and add metadata.
var putRequest = new PutObjectRequest
{
BucketName = bucketName,
Key = file.Name,
FilePath = file.FullName,
ContentType = "text/csv"
};
//putRequest.Metadata.Add("x-amz-meta-title", "someTitle"); //don't need meta data at this time
PutObjectResponse response = await client.PutObjectAsync(putRequest);
if (response.HttpStatusCode == System.Net.HttpStatusCode.OK)
{
ErrorLogging.LogMessageToFile("Http response code OK.");
return true;
}
else
{
ErrorLogging.LogMessageToFile(response.HttpStatusCode.ToString());
return false;
}
}
}
catch (AmazonS3Exception e)
{
ErrorLogging.LogErrorToFile(e);
return false;
}
catch (Exception e)
{
ErrorLogging.LogErrorToFile(e);
return false;
}
}
В Windows я получаю следующее исключение тайм-аута, как и ожидалось.Тем не менее, я не получаю ничего этого на Raspbian, даже если я жду 5 минут.Мой журнал только показывает, что я делаю это в «Попытка записи CSV-файла на S3».линия.Ничего больше.Например, если он никогда не выдает исключение или ничего не возвращает.
***Error message: ***A WebException with status NameResolutionFailure was thrown.
***HResult: ***-2146233088
***Inner exception: ***System.Net.WebException: The remote name could not be resolved: 's3.ca-central-1.amazonaws.com'
at System.Net.HttpWebRequest.EndGetRequestStream(IAsyncResult asyncResult, TransportContext& context)
at System.Net.HttpWebRequest.EndGetRequestStream(IAsyncResult asyncResult)
at System.Threading.Tasks.TaskFactory`1.FromAsyncCoreLogic(IAsyncResult iar, Func`2 endFunction, Action`1 endAction, Task`1 promise, Boolean requiresSynchronization)
Любая помощь приветствуется!