0

我正在开发“azure web 应用程序”。

我在 WebRole 中创建了 drive 和 drivePath 静态成员,如下所示:

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

我在 WebRole.OnStart 中创建了开发存储驱动器,如下所示:

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.OnStart,驱动器就无法从应用程序中使用并且静态成员被重置(例如 drivePath 设置为“”)

我是否缺少某些配置或其他错误?

4

2 回答 2

1

您希望使用 drivePath 的其他代码在哪里?它在网络应用程序中吗?

如果是这样,您使用的是 SDK 1.3 吗?在 SDK 1.3 中,Web 应用程序的默认模式是在完整的 IIS 下运行,这意味着在与您的 RoleEntryPoint 代码(如 OnStart)不同的应用程序域中运行,因此您不能在两者之间共享静态变量。如果这是问题所在,您可能会考虑将此初始化代码移至 Global.asax.cs 中的 Application_Begin(位于 Web 应用程序的应用程序域中)。

于 2010-12-24T22:10:02.027 回答
0

我找到了解决方案:

在开发机器中,请求来自 localhost,这导致系统崩溃。在 ServiceDefinition.csdef 中注释“站点”标签可解决该问题。

于 2010-12-29T11:35:40.207 回答