1

アマゾン クラウドでシンプルな Web アプリケーションをホストしました。ホストされた Web アプリケーションでバケット オブジェクトを読み取る際に問題に直面しています。

GetObjectResponse レスポンス = 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;
    }
}
4

1 に答える 1

2

この問題に対して私が見つけた最善の解決策は、次のCommunicationProtocolように を HTTP に設定することです。

AmazonS3Config s3Config = new AmazonS3Config();

s3Config.CommunicationProtocol = Protocol.HTTP;

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

...

Ubuntu では Mono 3.2.3 を、GitHub では C# AWSSDK を使用しています。OSX で同じコードを実行すると、この問題は発生しません。これは、Linux での HTTPS および Mono の証明書の使用に関係している可能性があります。

于 2013-10-16T23:36:58.743 に答える