我正在开发“azure web application”。
我在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 get设置为“”)
我是否遗漏了一些配置或其他错误?
答案 0 :(得分:1)
您希望使用drivePath的其他代码在哪里?它是在Web应用程序中吗?
如果是这样,您使用的是SDK 1.3吗?在SDK 1.3中,Web应用程序的默认模式是在完整的IIS下运行,这意味着在RoleEntryPoint代码(如OnStart)的单独应用程序域中运行,因此您无法在两者之间共享静态变量。如果这是问题,您可以考虑将此初始化代码移动到Global.asax.cs中的Application_Begin(在Web应用程序的应用程序域中)。
答案 1 :(得分:0)
我找到了解决方案:
在开发机器中,请求发起localhost,这使系统崩溃。 评论ServiceDefinition.csdef中的“Sites”标记可以解决问题。