Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
基于SOAP的amazons3客户端_Soap_Amazon S3_Amazon Web Services - Fatal编程技术网

基于SOAP的amazons3客户端

基于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

我需要一个用于AmazonS3的Win客户端,它对所有事务使用SOAP协议。就我所见,大多数解决方案都是基于REST的,而不是SOAP。有什么想法吗

编辑:

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

我需要的是一个Win平台的工作软件,它利用AmazonS3的SOAP,而不是如何完成我的工作的建议。多谢各位

  • 启动VisualStudio2008,创建一个新的C#Windows控制台应用程序

  • 添加s3wsdl作为服务引用。在解决方案资源管理器中,右键单击引用,选择添加服务引用。在地址框中键入S3 WSDL地址:。点击Go。“AmazonS3”应显示在服务框中。输入名称空间。我进入了Amazon.S3。单击“确定”

  • 修改Program.cs,使其看起来如下所示:


  • 如果您现在在适当的位置插入您的访问密钥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);
                }
            }
        }
    }