2009-09-12 10 views
17

Existen dos bibliotecas principales de .NET Amazon S3 de código abierto.¿Qué biblioteca de Amazon S3 .NET es más útil y eficiente?

  1. Three Sharp
  2. LitS3

Actualmente estoy usando LitS3 en nuestro proyecto de demostración MVC, pero hay algunas críticas al respecto. ¿Alguien ha usado ambas bibliotecas para que puedan dar un punto de vista objetivo?

A continuación algunas llamadas de muestra usando LitS3:

El controlador de demostración:

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

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

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

En vista de demostración:

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

EDIT 1:

Desde que tienen que mantenerse en movimiento y no hay una indicación clara de qué biblioteca es más efectiva y se mantiene más actualizada, tengo implementé un patrón de repositorio con una interfaz que me permitirá cambiar la biblioteca si es necesario en el futuro. A continuación se muestra una sección de la S3Repository que he creado y me deja cambiar las bibliotecas en caso de que necesite:

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 

Si usted tiene alguna información acerca de esta pregunta por favor hágamelo saber en un comentario, y conseguiré retrocede y edita la pregunta.

EDIT 2: Dado que esta cuestión no es llamar la atención, que integra las dos bibliotecas en mi aplicación web para ver las diferencias en el diseño, sé que esto es probablemente una pérdida de tiempo, pero realmente quiero un buen tiempo ejecutar la solución. A continuación, verá dos muestras de la misma acción con las dos bibliotecas, tal vez esto motive a algunos de ustedes a dejarme saber sus pensamientos.

con tres BIBLIOTECA SHARP:

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(); 
    } 

CON LITS3 BIBLIOTECA:

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

¿Por qué no te gusta LitS3? Estoy usando ThreeSharp sin ningún problema. –

+0

No me quejo de LitS3. Solo quiero asegurarme de que pueda tener un control API S3 completo y que sea eficiente. Gracias por tu comentario. – Geo

+0

No he usado LitS3 pero utilicé ThreeSharp y pensé que estaba bien diseñado. – skalb

Respuesta

4

puedo meter su cuchara diciendo que hemos estado utilizando Affirma ThreeSharp para tal vez un año más o menos. Estoy bastante seguro de que la primera vez que usamos S3 usamos la biblioteca SOAP de Amazon, que ciertamente no fue tan fácil como Affirma's ThreeSharp.

También he encontrado que es muy confiable, incluso al trabajar por lotes y cargar/descargar grandes cantidades de datos. ¡Parece que el proyecto no se actualiza tanto, pero no sentimos que necesitara una actualización!

ejemplo Código: Algo como esto va a cargar un archivo:

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)) 
       { } 
      } 

Editar: Amazon ahora han lanzado su propia biblioteca .Net por sus servicios web (incluyendo S3) lo que en consecuencia Affirma ya no están apoyando su biblioteca.
http://aws.amazon.com/sdkfornet/

+0

Hola Perhentian: ¿Cómo te sientes acerca de la falta de diseño de objetos en la biblioteca de Affirma? Te hacen procesar el XML, ¿hay alguna otra manera, me falta algo? cualquier comentario sobre eso? – Geo

+0

Hola Geo, En realidad, no me he acercado a ningún XML. Debería poder cargar un archivo en solo unas pocas líneas de C#. Eche un vistazo a su proyecto de muestra. – Perhentian

1

He tenido mejor suerte con LitS3. El ThreeSharp uno estaba cargando archivos con 0 bytes de vez en cuando y francamente está un poco sobre-diseñado para el problema que está resolviendo.

14

Parece que la biblioteca oficial es ahora 'AWS SDK para .NET', disponible aquí: http://aws.amazon.com/sdkfornet/

parece que incluye:

  • Ejemplos de código
  • integración de Visual Studio
  • .NET código de biblioteca

Soporta:

  • Amazon Elastic Compute Nube
  • Amazon Simple Storage Service
  • Amazon Virtual Private Cloud
  • Amazon SimpleDB
  • Amazon Relational Database Service
  • Amazon CloudFront
  • Amazon simple Servicio de cola
  • Amaz el servicio de notificación simple
  • Amazon Elastic MapReduce
  • Amazon CloudWatch
  • Elastic Load Balancing
  • Auto Scaling