2013-08-02 5 views
1

Я размещал простую веб-приложение в облаке amazon. Я столкнулся с проблемой чтения объекта bucket в моем размещенном web-приложении. Я получил ошибку в строке ниже, когда я попытался создать,AWS Достигнуто максимальное количество попыток повтора: 3

GetObjectResponse response = client.GetObject (запрос);

Ошибка: Максимальное число повторных попыток достигло: 3

Даже я попытался с увеличением MaxErrorRetry = 5, но до сих пор я получаю неполадку

* Если кто-то может помочь мне здесь я бы очень ценю это, спасибо :) *

Ниже приведен исходный код:

public class HomeController : Controller 
{ 
    static string keyName = ""; 
    static AmazonS3 client; 

    public ActionResult Index() 
    { 
     ViewBag.Message = "Welcome to ASP.NET MVC!"; 

     string data = readCloudData("filename.txt"); 

     ViewBag.Message = data; 
     return View(); 
    } 

    public ActionResult About() 
    { 
     return View(); 
    } 

    public string readCloudData(string objName) 
    { 
     string data = string.Empty; 
     if (checkRequiredFields(objName)) 
     { 
      NameValueCollection appConfig = ConfigurationManager.AppSettings; 

      string accessKeyID   = appConfig["AWSAccessKey"]; 
      string secretAccessKeyID = appConfig["AWSSecretKey"]; 
      string bucketName   = appConfig["AWSBucketName"]; 

      try 
      { 
       data = ReadingAnObject(accessKeyID, secretAccessKeyID, bucketName, objName); 
      } 
      catch (AmazonS3Exception s3Exception) 
      { 
       return "Error in reading file!"; 
      } 
     } 
     data = data.Trim(); 
     return data; 
    } 

    static string ReadingAnObject(string accessKeyID, string secretAccessKeyID, string bucketName, string keyName) 
    { 
     string responseBody = "";   
     using (client = Amazon.AWSClientFactory.CreateAmazonS3Client(
             accessKeyID, secretAccessKeyID)) 
     { 
      GetObjectRequest request = new GetObjectRequest() 
       .WithBucketName(bucketName).WithKey(keyName); 
      try 
      { 
       using (GetObjectResponse response = client.GetObject(request)) 
       {    

        using (Stream responseStream = response.ResponseStream) 
        { 
         using (StreamReader reader = 
          new StreamReader(responseStream)) 
         { 
          responseBody = reader.ReadToEnd(); 
         } 
        } 
       } 

      } 
      catch (AmazonS3Exception s3Exception) 
      { 

       return s3Exception.Message; 
      } 
     } 
     return responseBody; 
    } 

    static bool checkRequiredFields(string keyName) 
    { 
     NameValueCollection appConfig = ConfigurationManager.AppSettings; 

     if (string.IsNullOrEmpty(appConfig["AWSAccessKey"])) 
     { 
      return false; 
     } 
     if (string.IsNullOrEmpty(appConfig["AWSSecretKey"])) 
     { 
      return false; 
     } 
     if (string.IsNullOrEmpty(appConfig["AWSBucketName"])) 
     { 
      return false; 
     } 
     if (string.IsNullOrEmpty(keyName)) 
     { 
      return false; 
     } 

     return true; 
    } 
} 

ответ

2

Лучшее решение, которое я нашел для этой проблемы является установить CommunicationProtocol к HTTP, например, так:

AmazonS3Config s3Config = new AmazonS3Config(); 

s3Config.CommunicationProtocol = Protocol.HTTP; 

AmazonS3 client = Amazon.AWSClientFactory.CreateAmazonS3Client(accessKeyID, secretAccessKey, s3Config); 

... 

Мы используем Mono 3.2.3 на Ubuntu и C# AWSSDK on GitHub. Эта проблема не появляется при запуске того же кода в OSX. Это может иметь какое-то отношение к использованию HTTPS и Mono сертификатов в Linux.

Смежные вопросы