我需要一个适用于所有交易的Amazon S3的Win客户端。据我所知,大多数解决方案都是基于REST而不是SOAP。有什么想法吗?
编辑:
只想澄清一下:请不要建议使用REST代替。我完全清楚使用这两种协议可以做什么或不能做什么。因此,如果我要求这个具体的解决方案,那就有理由。
我需要的是Win平台的工作软件,它使用SOAP for Amazon S3,而不是建议如何完成我的工作。谢谢。
答案 0 :(得分:3)
启动Visual Studio 2008,创建一个新的C#Windows控制台应用程序。
添加S3 WSDL作为服务引用。在Solution Explorer中,右键单击References,选择Add Service Reference。在地址框中键入S3 WSDL地址:http://s3.amazonaws.com/doc/2006-03-01/AmazonS3.wsdl。单击Go。 “AmazonS3”应显示在“服务”框中。输入命名空间。我进入了Amazon.S3。单击“确定”。
修改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操作作为实例方法。
亚马逊网站在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解决方案。