4

すべてのトランザクションにSOAPプロトコルを利用するAmazonS3用のWinクライアントが必要です。私が見る限り、ほとんどのソリューションはSOAPではなくRESTベースです。何か案は?

編集:

明確にしておきたいのですが、代わりにRESTの使用を提案しないでください。私はどちらのプロトコルでも何ができるか、何ができないかを完全に知っています。したがって、この特定の解決策を求める場合、それには理由があります。

私が必要としているのは、Amazon S3用のSOAPを利用するWinプラットフォーム用の動作するソフトウェアであり、私の仕事のやり方を提案するものではありません。ありがとうございました。

4

1 に答える 1

3
  1. Visual Studio 2008 を起動し、新しい C# Windows コンソール アプリケーションを作成します。

  2. S3 WSDL をサービス参照として追加します。ソリューション エクスプローラーで [参照] を右クリックし、[サービス参照の追加] を選択します。[アドレス] ボックスに S3 WSDL アドレスを入力します: http://s3.amazonaws.com/doc/2006-03-01/AmazonS3.wsdl。「進む」をクリックします。[サービス] ボックスに「AmazonS3」が表示されます。名前空間を入力します。Amazon.S3に入りました。[OK] をクリックします。

  3. Program.cs を次のように変更します。


using System;
using System.Globalization;
using System.Text;
using System.Security.Cryptography;
using ConsoleApplication1.Amazon.S3;

namespace ConsoleApplication1 {
    class Program {
        private const string accessKeyId     = "YOURACCESSKEYIDHERE0";
        private const string secretAccessKey = "YOURSECRETACCESSKEYHEREANDYESITSTHATLONG";

        public static DateTime LocalNow() {
            DateTime now = DateTime.Now;
            return new DateTime(now.Year, now.Month, now.Day, now.Hour, now.Minute, now.Second, now.Millisecond, DateTimeKind.Local);
        }

       public static string SignRequest(string secret, string operation, DateTime timestamp) {
            HMACSHA1 hmac         = new HMACSHA1(Encoding.UTF8.GetBytes(secret));
            string   isoTimeStamp = timestamp.ToUniversalTime().ToString("yyyy-MM-ddTHH:mm:ss.fffZ", CultureInfo.InvariantCulture);
            string   signMe       = "AmazonS3" + operation + isoTimeStamp;
            string   signature    = Convert.ToBase64String(hmac.ComputeHash(Encoding.UTF8.GetBytes(signMe)));
            return signature;
        }

        static void Main(string[] args) {
            DateTime       now    = LocalNow();
            AmazonS3Client client = new AmazonS3Client();

            var result = client.ListAllMyBuckets(
                accessKeyId,
                now,
                SignRequest(secretAccessKey, "ListAllMyBuckets", now));

            foreach (var bucket in result.Buckets) {
                Console.WriteLine(bucket.Name);
            }
        }
    }
}

アクセス キー ID とシークレット アクセス キーを適切な場所に挿入してプログラムを実行すると、S3 バケットのリストが表示されます。

AmazonS3Client クラスには、インスタンス メソッドとして使用できるすべての SOAP 操作があります。

Amazon の Web サイトには、古い (VS2005 + WSE) C#/SOAP サンプルがhttp://developer.amazonwebservices.com/connect/entry.jspa?externalID=129&categoryID=47にあります。

編集: http://flyingpies.wordpress.com/2009/08/04/the-shortest-ever-s3-csoapwcf-client/にビジュアル スタジオ ソリューションを投稿しました。

于 2009-08-05T06:55:03.917 に答える