Question

I am developing "azure web application".

I have created drive and drivePath static members in WebRole as follows:

public static CloudDrive drive = null;
public static string drivePath = "";

I have created development storage drive in WebRole.OnStart as follows:

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;

The drive keeps visible and accessible till execution scope remain in WebRole.OnStart, as soon as execution scope leave WebRole.OnStart, drive become unavailable from application and static members get reset (such as drivePath get set to "")

Am I missing some configuration or some other error ?

Was it helpful?

Solution 2

I found the solution:

In development machine, request originate for localhost, which was making the system to crash. Commenting "Sites" tag in ServiceDefinition.csdef, resolves the issue.

OTHER TIPS

Where's the other code where you're expecting to use drivePath? Is it in a web application?

If so, are you using SDK 1.3? In SDK 1.3, the default mode for a web application is to run under full IIS, which means running in a separate app domain from your RoleEntryPoint code (like OnStart), so you can't share static variables across the two. If this is the problem, you might consider moving this initialization code to Application_Begin in Global.asax.cs instead (which is in the web application's app domain).

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top