2009-09-12 6 views
17

Es gibt zwei Open-Source-.NET-Amazon S3-Bibliotheken.Welche Amazon S3 .NET-Bibliothek ist am nützlichsten und effizientesten?

  1. Three Sharp
  2. LitS3

ich derzeit LitS3 in unserem MVC Demo-Projekt verwenden, aber es gibt einige Kritik darüber. Hat jemand hier beide Bibliotheken benutzt, so dass sie eine objektive Sichtweise geben können.

Im Folgenden einige Beispiel Anrufe mit LitS3:

Auf Demo-Controller:

private S3Service s3 = new S3Service() 
    { 
     AccessKeyID = "Thekey", 
     SecretAccessKey = "testing" 
    }; 

    public ActionResult Index() 
    { 
     ViewData["Message"] = "Welcome to ASP.NET MVC!"; 

     return View("Index",s3.GetAllBuckets()); 
    } 

Auf Demoansicht:

<% foreach (var item in Model) 
    { %> 
    <p> 
    <%= Html.Encode(item.Name) %> 
    </p> 
<% } %> 

EDIT 1:

Da ich zu halten haben bewegt und es gibt keinen klaren Hinweis darauf, welche Bibliothek effektiver und aktueller ist, habe ich Implementiert ein Repository-Muster mit einer Schnittstelle, die es mir erlaubt, die Bibliothek zu ändern, wenn ich in der Zukunft brauche. Unten ist ein Abschnitt der S3Repository die ich geschaffen habe und ich Bibliotheken im Fall ändern lassen muß ich:

using LitS3; 

namespace S3Helper.Models 
{ 
    public class S3Repository : IS3Repository 
    { 
    private S3Service _repository; 
    #region IS3Repository Members 

    public IQueryable<Bucket> FindAllBuckets() 
    { 
     return _repository.GetAllBuckets().AsQueryable(); 
    } 

    public IQueryable<ListEntry> FindAllObjects(string BucketName) 
    { 
     return _repository.ListAllObjects(BucketName).AsQueryable(); 
    } 

    #endregion 

Wenn haben Sie irgendwelche Informationen über diese Frage mich in einem Kommentar bitte wissen lassen, und ich werde kommen zurück und editiere die Frage.

EDIT 2: Da diese Frage Aufmerksamkeit ist nicht immer, integrierte ich beiden Bibliotheken in meinem Web-App, die Unterschiede in Design, um zu sehen, weiß ich, das ist wahrscheinlich eine Taille der Zeit, aber ich mag wirklich ein guten lang Lösung ausführen. Unten sehen Sie zwei Beispiele der gleichen Aktion mit den beiden Bibliotheken, vielleicht wird dies einige von Ihnen dazu motivieren, mir Ihre Gedanken mitzuteilen.

MIT DREI SHARP BIBLIOTHEK:

public IQueryable<T> FindAllBuckets<T>() 
    { 
     List<string> list = new List<string>(); 

     using (BucketListRequest request = new BucketListRequest(null)) 
     using (BucketListResponse response = service.BucketList(request)) 
     { 
      XmlDocument bucketXml = response.StreamResponseToXmlDocument(); 
      XmlNodeList buckets = bucketXml.SelectNodes("//*[local-name()='Name']"); 
      foreach (XmlNode bucket in buckets) 
      { 
       list.Add(bucket.InnerXml); 
      } 
     } 
     return list.Cast<T>().AsQueryable(); 
    } 

MIT LITS3 BIBLIOTHEK:

public IQueryable<T> FindAllBuckets<T>() 
    { 
     return _repository.GetAllBuckets() 
      .Cast<T>() 
      .AsQueryable(); 
    } 
+0

Warum gehst du nicht wie LitS3? Ich verwende ThreeSharp ohne Probleme. –

+0

Ich habe keine Beschwerden über LitS3. Ich möchte nur sicherstellen, dass ich volle S3-API-Kontrolle haben kann und dass es effizient ist. Vielen Dank für Ihren Kommentar. – Geo

+0

Ich habe LitS3 nicht benutzt, aber ich habe ThreeSharp stark benutzt und ich dachte, es sei gut designed. – skalb

Antwort

4

Ich kann in läuten sagen, dass wir für vielleicht ein Jahr oder so Affirma ThreeSharp im Einsatz. Ich bin mir ziemlich sicher, dass wir bei der ersten Verwendung von S3 die SOAP-Bibliothek von Amazon verwendet haben, die sicherlich nicht so einfach war wie Affirmas ThreeSharp.

Ich habe auch festgestellt, dass es sehr zuverlässig ist, auch wenn Batch-Arbeit und das Hochladen/Herunterladen großer Datenmengen. Das Projekt scheint nicht so oft aktualisiert zu werden, aber wir hatten nicht das Gefühl, dass es jemals aktualisiert werden müsste!

Code-Beispiel: Etwas ähnliches wird eine Datei hochladen:

m_config = new ThreeSharpConfig 
          { 
           AwsAccessKeyID = Core.ConfigSettings.AmazonS3AccessKey, 
           AwsSecretAccessKey = Core.ConfigSettings.AmazonS3SecretAccessKey, 
           ConnectionLimit = 40, 
           IsSecure = true 

          }; 
      m_service = new ThreeSharpQuery(m_config); 



using (var request = new ObjectAddRequest(amazonS3BucketName, fileName.Replace(' ', '_'))) 
      { 
       request.Headers.Add("x-amz-acl", "public-read-write"); 
       request.LoadStreamWithBytes(fileData); 

       if (redirectUrl != null) 
       { 
        request.RedirectUrl = redirectUrl; 
       } 

       using (ObjectAddResponse response = m_service.ObjectAdd(request)) 
       { } 
      } 

Edit: Amazon gestartet hat jetzt ihre eigene Net-Bibliothek für ihre Web-Dienste (einschließlich S3) so folglich Affirma ist nicht ihr mehr unterstützt Bibliothek.
http://aws.amazon.com/sdkfornet/

+0

Hallo Perhentian: Was denkst du über das Fehlen von Objektdesign in Affirmas Bibliothek? Sie lassen dich das XML verarbeiten, gibt es sonst noch etwas, mir fehlt etwas? Irgendwelche Eingaben dazu? – Geo

+0

Hallo Geo, Eigentlich bin ich nicht in der Nähe von XML gegangen. Sie sollten in der Lage sein, eine Datei in nur wenigen Zeilen C# hochzuladen. Sehen Sie sich ihr Beispielprojekt an. – Perhentian

1

Ich hatte mehr Glück mit LitS3. Der ThreeSharp hat von Zeit zu Zeit Dateien mit 0 Byte hochgeladen und ist ehrlich gesagt ein wenig überentwickelt für das Problem, das er löst.

14

Sieht aus wie die offizielle Bibliothek jetzt 'AWS SDK für .NET' ist, finden Sie hier: http://aws.amazon.com/sdkfornet/

Sieht aus wie es umfasst:

  • Proben-Code
  • Visual Studio Integration
  • .NET-Bibliothekscode

Es unterstützt:

  • Amazon Elastic Compute Cloud
  • Amazon Simple Storage Service
  • Amazon Virtual Private Cloud
  • Amazon SimpleDB
  • Amazon Relational Database Service
  • Amazon Cloudfront
  • Amazon Simple Warteschlangenservice
  • Amaz Simple Notification Service
  • Amazon Elastic MapReduce
  • Amazon Cloudwatch
  • Elastic Load Balancing
  • Auto Scaling