azure считывает смонтированный VHD-файл
Вопрос
Я разрабатываю "веб-приложение Azure".
Я создал статические элементы drive и drivePath в WebRole следующим образом:
public static CloudDrive drive = null;
public static string drivePath = "";
Я создал накопитель для разработки в WebRole.Запустите его следующим образом:
LocalResource azureDriveCache = RoleEnvironment.GetLocalResource("cache");
CloudDrive.InitializeCache(azureDriveCache.RootPath, azureDriveCache.MaximumSizeInMegabytes);
CloudStorageAccount.SetConfigurationSettingPublisher((configName, configSetter) =>
{
// for a console app, reading from App.config
//configSetter(ConfigurationManager.AppSettings[configName]);
// OR, if running in the Windows Azure environment
configSetter(RoleEnvironment.GetConfigurationSettingValue(configName));
});
CloudStorageAccount account = CloudStorageAccount.DevelopmentStorageAccount;
CloudBlobClient blobClient = account.CreateCloudBlobClient();
blobClient.GetContainerReference("drives").CreateIfNotExist();
drive = account.CreateCloudDrive(
blobClient
.GetContainerReference("drives")
.GetPageBlobReference("mysupercooldrive.vhd")
.Uri.ToString()
);
try
{
drive.Create(64);
}
catch (CloudDriveException ex)
{
// handle exception here
// exception is also thrown if all is well but the drive already exists
}
string path = drive.Mount(azureDriveCache.MaximumSizeInMegabytes, DriveMountOptions.None);
IDictionary<String, Uri> listDrives = Microsoft.WindowsAzure.StorageClient.CloudDrive.GetMountedDrives();
drivePath = path;
Диск остается видимым и доступным до тех пор, пока область выполнения не останется в WebRole.OnStart, как только область выполнения покинет WebRole.При запуске диск становится недоступен из приложения, а статические элементы сбрасываются (например, для пути к диску устанавливается значение "").
Я пропустил какую-то конфигурацию или какую-то другую ошибку?
Решение 2
Я нашел решение:
На компьютере разработки запрос исходил от localhost, что приводило к сбою системы.Добавление комментария к тегу "Сайты" в ServiceDefinition.csdef устраняет проблему.
Другие советы
Где другой код, в котором вы ожидаете использовать drivePath?Это в веб-приложении?
Если да, используете ли вы SDK 1.3?В SDK 1.3 режимом по умолчанию для веб-приложения является запуск под полным управлением IIS, что означает запуск в отдельном домене приложения от вашего кода RoleEntryPoint (например, OnStart), поэтому вы не можете совместно использовать статические переменные между ними.Если проблема в этом, вы могли бы рассмотреть возможность переноса этого кода инициализации в Application_Begin вместо этого в Global.asax.cs (который находится в домене приложений веб-приложения).