Windows Azure — доступ к локальному хранилищу webrole из отдельной рабочей роли

Я запускаю приложение в Windows Azure, представления MVC должны быть динамическими, я начал с хранения их в виде записей в базе данных, но очень хочу переместить их в физическое место.

Моя идея заключалась в том, чтобы создать физический файл с помощью кода... который отлично работал и значительно ускорял загрузку страницы. Это было, конечно, до того, как я понял, что файлы были доступны только на время действия роли.

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

Поэтому я перешел от задачи запуска к функции в методе запуска роли, которая проверяет базу данных каждые 10 минут, чтобы увидеть, произошли ли изменения. Проблема в том, что это, кажется, душит приложение (по крайней мере, на этапе прогрева).

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

Просто чтобы уточнить, чего я пытаюсь достичь

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


person Brett Smith    schedule 04.06.2012    source источник
comment
Я очень обеспокоен созданием решения на основе локального хранилища, которое может исчезнуть в любой момент. Я бы подумал сначала о чем-то, что не зависит от локального хранилища, и, если это необходимо, сохранить код на той же машине, где находится локальное хранилище, при изменении размера машины на более крупную виртуальную машину. Это просто не очень хороший дизайн в целом.   -  person AvkashChauhan    schedule 05.06.2012
comment
Мое понимание локального хранилища состоит в том, что оно (по крайней мере) такое же постоянное, как и сама роль (т. е. если роль потеряна или переработана, то локальное хранилище необходимо будет воссоздать, но также роль, поэтому установка файлов может быть выполнена в роли как задача запуска) было бы неплохо хранить файлы в более постоянном месте, но, насколько я вижу, доступ к хранилищу BLOB-объектов можно получить только через http/https, а не через путь к файлу, который оказывает негативное влияние на мой провайдер виртуального пути ( Я пробовал), спасибо за ваш вклад :) дизайн находится в стадии разработки.   -  person Brett Smith    schedule 05.06.2012
comment
а потом я обнаруживаю лазурный облачный диск и удивляюсь, где он был всю мою жизнь.   -  person Brett Smith    schedule 05.06.2012
comment
Конечно, Cloud Drive — это отличный вариант, в котором вы можете смонтировать запись / чтение Cloud Drive в одной роли и чтение в нескольких ролях.   -  person AvkashChauhan    schedule 05.06.2012


Ответы (1)


Я считаю, что у вас есть точно такие же возможности, как если бы вы работали с отдельными экземплярами Windows Server 2008 R2.

Лучше всего было бы создать веб-службу или любое стандартное приложение, которое можно вызывать из внешнего места, которое создает фактические файлы на вашем локальном диске (из переданных ему параметров) и вызывать эту веб-службу из рабочей роли. периодически.

Конечно, есть много других обходных путей, но я не думаю, что существует какой-либо стандартный способ доступа к локальному хранилищу из отдельной роли в Azure.

person hpityu    schedule 04.06.2012
comment
Имеет смысл. веб-сервис может работать. Я видел реализации virtualpathprovider, которые извлекают представления из zip-папок, поэтому потенциально я мог бы создать представление/структуру папок в отдельном экземпляре роли и заархивировать его, а затем загрузить zip-папку в локальное хранилище и обслуживать представления непосредственно оттуда. Спасибо - person Brett Smith; 05.06.2012