2012-04-04 79 views
1

请帮助我。我正在编写以下代码来挂载vhd文件。但我无法安装它。它在本地很好地工作,但是当我将它部署在Azure服务器上时,webrole仍处于脱机状态。我尝试删除下面的foreach块但徒劳无功。但是当我删除代码“Global.driveLetter = drive.Mount(localCache.MaximumSizeInMegabytes - 20,DriveMountOptions.Force);”角色已准备好在服务器上。但我不能这样做,因为这是安装驱动器的关键声明。无法在Azure服务器上安装VHD驱动器

会出现什么问题?

private static void MountAzureDrive() 
    { 
     string connectionStringSettingName = "AzureConnectionString"; 
     string azureDriveContainerName = "azuredrives"; 
     string azureDrivePageBlobName = Guid.NewGuid().ToString("N").ToLowerInvariant(); 
     string azureDriveCacheDirName = Path.Combine(Environment.CurrentDirectory, "cache"); 

     CloudStorageAccount.SetConfigurationSettingPublisher((a, b) => 
     { 
      b(RoleEnvironment.GetConfigurationSettingValue(connectionStringSettingName)); 
     }); 

     //CloudStorageAccount storageAccount=CloudStorageAccount.FromConfigurationSetting(connectionStringSettingName); 
CloudStorageAccount storageAccount=CloudStorageAccount.DevelopmentStorageAccount; 

     LocalResource localCache=RoleEnvironment.GetLocalResource("InstanceDriveCache"); 
     CloudDrive.InitializeCache(localCache.RootPath + "cache", localCache.MaximumSizeInMegabytes); 

     // Just checking: make sure the container exists 
     CloudBlobClient blobClient = storageAccount.CreateCloudBlobClient(); 
     blobClient.GetContainerReference("drives").CreateIfNotExist(); 

     // Create cloud drive 
    //WebRole.drive=storageAccount.CreateCloudDrive(blobClient.GetContainerReference("drives").GetPageBlobReference("Test.VHD").Uri.ToString()); 
     WebRole.drive = storageAccount.CreateCloudDrive("drives/Test.VHD"); 

     try 
     { 
      WebRole.drive.CreateIfNotExist(512); 
     } 
     catch (CloudDriveException ex) 
     { 
      // handle exception here 
      // exception is also thrown if all is well but the drive already exists 
     } 

     foreach (var d in CloudDrive.GetMountedDrives()) 
     { 
      var mountedDrive = storageAccount.CreateCloudDrive(d.Value.PathAndQuery); 
      mountedDrive.Unmount(); 
     } 
     //Global.driveLetter = drive.Mount(25, DriveMountOptions.Force); 
     Global.driveLetter = drive.Mount(localCache.MaximumSizeInMegabytes - 20, DriveMountOptions.Force); 
    } 

在此先感谢。

+0

我会尝试把整个事情在一个try/catch,看看是否有事情发生。或登录到实例并调试它。如果您有VS Ultimate,请使用IntelliTrace。 – Tom 2012-04-04 18:19:09

回答

1

也许这说明了显而易见的,但是......当您部署到Windows Azure时,您是否从dev存储更改了存储帐户?你有开发存储模拟器硬编码:

CloudStorageAccount storageAccount=CloudStorageAccount.DevelopmentStorageAccount;

相关问题