基于SOAP的Amazon S3客户端

时间:2009-08-04 20:10:45

标签: soap amazon-s3 amazon-web-services

我需要一个适用于所有交易的Amazon S3的Win客户端。据我所知,大多数解决方案都是基于REST而不是SOAP。有什么想法吗?

编辑:

只想澄清一下:请不要建议使用REST代替。我完全清楚使用这两种协议可以做什么或不能做什么。因此,如果我要求这个具体的解决方案,那就有理由。

我需要的是Win平台的工作软件,它使用SOAP for Amazon S3,而不是建议如何完成我的工作。谢谢。

1 个答案:

答案 0 :(得分:3)

  1. 启动Visual Studio 2008,创建一个新的C#Windows控制台应用程序。

  2. 添加S3 WSDL作为服务引用。在Solution Explorer中,右键单击References,选择Add Service Reference。在地址框中键入S3 WSDL地址:http://s3.amazonaws.com/doc/2006-03-01/AmazonS3.wsdl。单击Go。 “AmazonS3”应显示在“服务”框中。输入命名空间。我进入了Amazon.S3。单击“确定”。

  3. 修改Program.cs,如下所示:


  4. 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操作作为实例方法。

    亚马逊网站在http://developer.amazonwebservices.com/connect/entry.jspa?externalID=129&categoryID=47带有较旧的(VS2005 + WSE)C#/ SOAP示例。

    编辑:在http://flyingpies.wordpress.com/2009/08/04/the-shortest-ever-s3-csoapwcf-client/发布了一个visual studio解决方案。