Какая библиотека Amazon S3 .NET наиболее полезна и эффективна? - PullRequest
17 голосов
/ 12 сентября 2009

Существует две основные библиотеки с открытым исходным кодом .net Amazon S3.

  1. Три острые
  2. LitS3

В настоящее время я использую LitS3 в нашем демонстрационном проекте MVC, но есть некоторая критика по этому поводу. Кто-нибудь здесь использовал обе библиотеки, чтобы они могли дать объективную точку зрения.

Ниже приведены некоторые примеры звонков с использованием LitS3:

На демонстрационном контроллере:

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

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

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

В демонстрационном режиме:

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

РЕДАКТИРОВАТЬ 1:

Поскольку я должен продолжать двигаться, и нет четких указаний на то, какая библиотека более эффективна и постоянно обновляется, я реализовал шаблон хранилища с интерфейсом, который позволит мне менять библиотеку, если мне нужно, в будущее. Ниже приведен раздел созданного мною репозитория S3, который позволит мне менять библиотеки в случае необходимости:

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

Если у вас есть какая-либо информация по этому вопросу, пожалуйста, сообщите мне об этом в комментарии, и я вернусь и отредактирую вопрос.

РЕДАКТИРОВАТЬ 2: Поскольку этот вопрос не привлекает к себе внимания, я интегрировал обе библиотеки в свое веб-приложение, чтобы увидеть различия в дизайне, я знаю, что это, вероятно, время, но я действительно хочу хорошее долгосрочное решение. Ниже вы увидите два примера одного и того же действия с двумя библиотеками, возможно, это побудит некоторых из вас сообщить мне ваши мысли.

С ТРЕТЬЕЙ РЕЗКОЙ БИБЛИОТЕКОЙ:

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

С БИБЛИОТЕКОЙ LITS3:

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

Ответы [ 3 ]

14 голосов
/ 28 апреля 2010

Похоже, что официальная библиотека теперь ' AWS SDK для .NET ', доступна здесь: http://aws.amazon.com/sdkfornet/

Похоже, оно включает в себя:

  • Образцы кода
  • Интеграция с Visual Studio
  • .NET код библиотеки

Поддерживает:

  • Amazon Elastic Compute Cloud
  • Amazon Simple Storage Service
  • Виртуальное частное облако Amazon
  • Amazon SimpleDB
  • Сервис реляционных баз данных Amazon
  • Amazon CloudFront
  • Amazon Simple Queue Service
  • Сервис простых уведомлений Amazon
  • Amazon Elastic MapReduce
  • Amazon CloudWatch
  • Упругая балансировка нагрузки
  • Автоматическое масштабирование
4 голосов
/ 16 сентября 2009

Я могу вмешаться, сказав, что мы использовали Affirma ThreeSharp, возможно, год или около того. Я уверен, что в первый раз, когда мы использовали S3, мы использовали библиотеку Amazon SOAP, которая, конечно же, была не такой простой, как ThreeSharp Affirma.

Я также обнаружил, что это очень надежно, даже при выполнении пакетной работы и загрузке / загрузке больших объемов данных. Проект, кажется, не обновляется так сильно, но тогда мы не чувствовали, что он когда-либо нуждался в обновлении!

Пример кода: Примерно так будет загружаться файл:

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

Редактировать: Amazon теперь запустил собственную библиотеку .Net для своих веб-сервисов (включая S3), поэтому Affirma больше не поддерживает их библиотеку.
http://aws.amazon.com/sdkfornet/

1 голос
/ 09 октября 2009

Мне повезло больше с LitS3. ThreeSharp один загружал файлы с 0 байтами время от времени, и, откровенно говоря, немного перегружен для решения проблемы, которую он решает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...