基于SOAP的amazons3客户端
我需要一个用于AmazonS3的Win客户端,它对所有事务使用SOAP协议。就我所见,大多数解决方案都是基于REST的,而不是SOAP。有什么想法吗 编辑: 只是想澄清一下:请不要建议使用REST。我完全清楚使用这两种协议可以做什么或不能做什么。因此,如果我要求这个具体的解决方案,这是有原因的 我需要的是一个Win平台的工作软件,它利用AmazonS3的SOAP,而不是如何完成我的工作的建议。多谢各位基于SOAP的amazons3客户端,soap,amazon-s3,amazon-web-services,Soap,Amazon S3,Amazon Web Services,我需要一个用于AmazonS3的Win客户端,它对所有事务使用SOAP协议。就我所见,大多数解决方案都是基于REST的,而不是SOAP。有什么想法吗 编辑: 只是想澄清一下:请不要建议使用REST。我完全清楚使用这两种协议可以做什么或不能做什么。因此,如果我要求这个具体的解决方案,这是有原因的 我需要的是一个Win平台的工作软件,它利用AmazonS3的SOAP,而不是如何完成我的工作的建议。多谢各位 启动VisualStudio2008,创建一个新的C#Windows控制台应用程序 添加s3w
如果您现在在适当的位置插入您的访问密钥ID和机密访问密钥并运行该程序,您应该会得到S3存储桶的列表 AmazonS3Client类上的所有SOAP操作都可以作为实例方法使用 亚马逊网站上有一个较旧的(VS2005+WSE)C#/SOAP示例
编辑:在上发布了visual studio解决方案。为什么需要SOAP?S3的RESTAPI要简单得多,我相信SOAP缺少一些功能……我同意。SOAP应该是最后的选择。构建一个利用SOAP的小应用程序。需要一个可比较的工作解决方案。您的windows客户端使用哪种技术?@Nick,您不能使用现有的REST库中的一个用于S3,而SOAP用于您正在做的任何事情吗?
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);
}
}
}
}