Клиент Amazon S3 на основе SOAP - PullRequest
       12

Клиент Amazon S3 на основе SOAP

4 голосов
/ 05 августа 2009

Мне нужен клиент Win для Amazon S3, который использует протокол SOAP для всех транзакций. Насколько я вижу, большинство решений основано на REST, а не на SOAP. Есть идеи?

EDIT:

Просто хочу уточнить: пожалуйста, не предлагайте вместо этого использовать REST. Я прекрасно знаю, что можно или нельзя делать с любым протоколом. Поэтому, если я попрошу об этом конкретном решении, для этого есть причина.

Мне нужно работающее программное обеспечение для платформы Win, которое использует SOAP для Amazon S3, а не предложения, как выполнять мою работу. Спасибо.

1 Ответ

3 голосов
/ 05 августа 2009
  1. Запустите Visual Studio 2008, создайте новое консольное приложение C # для Windows.

  2. Добавьте S3 WSDL в качестве справочного обслуживания. В обозревателе решений щелкните правой кнопкой мыши Ссылки, выберите Добавить ссылку на службу. Введите адрес S3 WSDL в поле Адрес: http://s3.amazonaws.com/doc/2006-03-01/AmazonS3.wsdl. Нажмите Перейти. «AmazonS3» должен отображаться в поле «Службы». Введите пространство имен. Я вошел в Amazon.S3. Нажмите ОК.

  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);
            }
        }
    }
}

Если вы сейчас вставите свой идентификатор ключа доступа и секретный ключ доступа в соответствующие места и запустите программу, вы должны получить список ваших блоков S3.

В классе AmazonS3Client есть все операции SOAP, доступные как методы экземпляра.

Веб-сайт Amazon содержит более старый (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/.

...