Frage
Ich entwickle „azur Web-Anwendung“.
Ich habe Antrieb und drivePath statische Mitglieder in WebRole wie folgt erstellt:
public static CloudDrive drive = null;
public static string drivePath = "";
Ich habe in WebRole.OnStart Entwicklung Speicherlaufwerk wie folgt erstellt:
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;
Der Antrieb hält sichtbar und zugänglich bis Umfang Ausführung bleibt in WebRole.OnStart, sobald die Ausführung Umfang verlassen WebRole.OnStart, Laufwerk nicht mehr verfügbar ist von der Anwendung und statischen Mitgliedern erhält zurückgesetzt (wie drivePath auf „“ gesetzt werden)
Bin ich eine Konfiguration oder einen anderen Fehler fehlt?
Lösung 2
ich die Lösung gefunden:
In der Entwicklungsmaschine, Antrag auf localhost stammt, die das System zum Absturz zu machen. Kommentiert "Seiten" tag in ServiceDefinition.csdef, wird das Problem behoben.
Andere Tipps
Wo ist der andere Code, wo Sie erwarten drivePath zu benutzen? Ist es in einer Web-Anwendung?
Wenn ja, verwenden Sie SDK 1.3? In SDK 1.3 ist der Standardmodus für eine Web-Anwendung unter Voll IIS ausgeführt werden, was bedeutet, in einer separaten Anwendungsdomäne von Ihrem RoleEntryPoint Code ausgeführt wird (wie OnStart), so dass Sie nicht statische Variablen für die beiden anderen teilen können. Wenn dies das Problem ist, könnten Sie diesen Code für die Initialisierung zu Application_Begin in Global.asax.cs Bewegen statt (die in der Web-Anwendung App-Domain ist).