2009-08-04 12 views
4

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

EDIT:

ちょうど明確にしたい:代わりにRESTを使用することをお勧めしないでください。私はどちらのプロトコルでもできないことを完全に認識しています。だから私がこの特定の解決策を求めたら、それには理由があります。

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

+3

なぜSOAPが必要ですか? S3のREST APIは非常に簡単で、SOAPにはいくつかの機能が欠けていると思います... – bdonlan

+2

私は同意します。 SOAPは最後の手段でなければなりません。 –

+0

SOAPを利用する小さなアプリケーションを構築する。同等の作業ソリューションが必要です。 – Nick

答えて

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に格納されています。

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

関連する問題