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 を使用する予定の他のコードはどこにありますか? それはWebアプリケーションにありますか?

使用している場合、SDK 1.3 を使用していますか? SDK 1.3 では、Web アプリケーションの既定のモードは完全な IIS で実行されます。つまり、RoleEntryPoint コード (OnStart など) とは別のアプリ ドメインで実行されるため、2 つの間で静的変数を共有することはできません。これが問題である場合は、代わりにこの初期化コードを Global.asax.cs (Web アプリケーションのアプリ ドメインにある) の Application_Begin に移動することを検討してください。

于 2010-12-24T22:10:02.027 に答える
0

私は解決策を見つけました:

開発マシンでは、システムをクラッシュさせていた localhost に対してリクエストが発信されました。ServiceDefinition.csdef の "Sites" タグにコメントを付けると、問題が解決します。

于 2010-12-29T11:35:40.207 に答える