Windows Azure просит - PullRequest
       3

Windows Azure просит

0 голосов
/ 26 января 2012

У меня есть приложение, которое развернуто в Windows Azure, в приложении есть часть Report, отчеты работают, как показано ниже.

  1. Приложение генерирует отчет в виде файла PDF и сохраняет его в определенной папке приложения.
  2. У меня есть приложение для просмотра PDF в приложении, которое берет URL-адрес файла и отображает его.

Как вы знаете, в Windows Azure у меня будет несколько виртуальных машин, которые будут обрабатываться через балансировщик нагрузки, поэтому я не могу гарантировать, что запрос на шаге 2 перейдет к той же виртуальной машине на шаге 1, и это вызовет проблему для я.

Любая помощь очень ценится.

Я знаю, что могу использовать BLOB, но это не проблема. Проблема заключается в том, что после создания файла на определенной виртуальной машине я задаю для средства просмотра PDF URL средства просмотра PDF как «http: //..../file.pdf». Это создаст новый запрос, которым я не могу управлять, и я не могу знать, какая виртуальная машина будет работать на сервере, поэтому даже если я сохранил файл в BLOB, это не решит мою проблему.

Ответы [ 5 ]

2 голосов
/ 26 января 2012

Как и в любой среде фермы, вы должны учитывать сохранение файлов в хранилище, которое является общим для всех машин в ферме.В Windows Azure таким общим хранилищем является Windows Azure Blob Storage .

Вы должны внести некоторые изменения в свое приложение, чтобы оно сохраняло файлы в виде Blob.Если это общедоступные файлы, вы просто помечаете контейнер BLOB-объектов как общедоступный и предоставляете полный URL-адрес файла в BLOB-объекте для средства просмотра PDF.

Если ваши файлы PDF являются частными, вы должны пометить свой контейнер какчастный.Вторым шагом является создание URL-адреса подписи общего доступа для PDF-файла и предоставление этого URL-адреса для средства просмотра PDF.

Кроме того, во время разработки вы можете исследовать свое хранилище Azure с помощью любого (свободно)и не так свободно) доступны инструменты для Windows Azure Storage.Вот некоторые из них:

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

Надеюсь, это поможет!

ОБНОВЛЕНИЕ (после обновления вопроса)

Проблема в том, что после создания файла на определенной виртуальной машине я задаю для средства просмотра PDF URL средства просмотра PDF как «http: //..../file.pdf».Это сгенерирует новый запрос, которым я не могу управлять, и я не могу знать, какая виртуальная машина будет работать на сервере, поэтому даже если я сохраню файл в BLOB, он не решит

Попробуйте немного изменить свою логику, иследуй моим инструкциям.Когда ваша виртуальная машина создаст PDF, загрузите файл в BLOB-объект.Затем передайте полный URL-адрес блоба для вашего файла PDF в программу просмотра PDF.Таким образом, запрос будет отправляться не на любую виртуальную машину, а только на большой двоичный объект.И полный URL-адрес блоба будет примерно таким: http://youraccount.blob.core.windows.net/public_files/file.pdf

Или я что-то упустил?Насколько я понимаю, ваш процесс выполняется следующим образом:

  1. Пользователь делает специальный запрос, который может привести к генерации файла PDF
  2. Файл генерируется на сервере
  3. fullURL-адрес файла отправляется обратно клиенту, чтобы клиентская программа просмотра PDF могла отобразить его

Если это поток, то с предлагаемыми изменениями будет выглядеть следующим образом:

  1. Пользователь делает специальный запрос, который может привести к генерации файла PDF
  2. Файл генерируется на сервере
  3. Файл загружается в хранилище больших двоичных объектов
  4. Полный URL-адрес файлав BLOB возвращается обратно клиенту, так что он может быть отображен на клиенте.

Что не ясно?Или что отличается в вашем процессе?То же самое я делаю для генерации отчетов на лету, и это работает довольно хорошо.Единственное отличие состоит в том, что мое приложение основано на Silverlight, и я принудительно загружаю файлы вместо встроенного отображения.

1 голос
/ 26 января 2012

Альтернативный подход - не сохранять файл вообще.

Скорее, сгенерируйте его в памяти, установите тип содержимого ответа «application / pdf» и верните двоичное содержимое отчета. Это особенно легко, если вы используете ASP.NET MVC, но вместо этого вы можете использовать HttpHandler. Это техника, которую я регулярно использую в подобных обстоятельствах (хотя в последнее время с отчетами Excel, а не PDF).

Полезность этого подхода зависит от того, как вы генерируете PDF, насколько он велик и какова нагрузка на ваше приложение.

Но если отчет нужно обслуживать только один раз, то сохранение его только для того, чтобы браузер мог сделать еще один запрос на его получение, просто расточительно (и вы должны предоставить механизм сохранения).

Если один и тот же файл должен обслуживаться несколько раз и его создание требует значительных ресурсов, имеет смысл сохранить его.

0 голосов
/ 26 января 2012

Другой вариант - реализовать собственный обработчик сессий. Взгляните на:

http://dunnry.com/blog/2010/10/14/StickyHTTPSessionRoutingInWindowsAzure.aspx

0 голосов
/ 26 января 2012

Вы хотите сохранить PDF в централизованном постоянном хранилище.Жесткий диск VM не является ни тем, ни другим.Azure Blob Storage, вероятно, самое простое и лучшее решение.Это очень дешево для хранения и доступа.API для хранения файлов и доступа к ним очень прост

0 голосов
/ 26 января 2012

Есть две вещи, которые вы можете рассмотреть.

Windows Azure Blob + Хранилище очередей

Хранилище BLOB-объектов - это экономически эффективный способ хранения двоичных файлов и обмена этой информацией между экземплярами.Скорее всего, вы будете использовать рабочую роль для создания отчета, который будет хранить отчет в хранилище BLOB-объектов и помещать завершенное сообщение в очередь.

Ваш экземпляр веб-роли может отслеживать очередь в поисках отчетов, готовых к отображению.

Это будет похоже на концепцию, используемую в приложении гостевой книги Windows Azure .

Служба кэширования Windows Azure

Точно так же [и намного дороже] вы можете поделиться двоичным файлом, используя Служба кэширования .Это дает общий уровень между вашими виртуальными машинами, в котором можно хранить вещи, однако вы не сможете указать URL-адрес PDF-файла, который вам потребуется для загрузки бинарного файла и использования HttpHandler или изменения типа содержимого запроса.

Это было бы намного сложнее реализовать, очень дорого запустить и не гарантировало бы работу в вашем сценарии.Я бы все-таки предложил Blobs поверх любых других средств

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