2

かなり複雑なアプリケーションを Windows Azure に移行しようとしています。Worker ロールと Web ロールの両方で、アプリケーションがファイルをローカル ファイル システムに保存するインスタンスが多数あります。

次に例を示します。

string thumbnailFileName = System.IO.Path.GetDirectoryName(fileName) + "\\" + "bthumb_" + System.IO.Path.GetFileName(fileName);

thumbnail.Save(thumbnailFileName);

そして別の例:

 using (System.IO.StreamWriter file = System.IO.File.AppendText(GetCurrentLogFilePath()))
   {
     string logEntry = String.Format("\r\n{0} - {1}: {2}", DateTime.Now.ToString("yyyy.MM.dd@HH.mm.ss"), type.ToString(), message);
     file.Write(logEntry);

     file.Close();
   }

これらの例では、画像とログ ファイルを app.config で指定されたファイルの場所に保存しています。次に例を示します。

<add key="ImageFileDirectory" value="C:\temp\foo\root\auth\inventorypictures"/>

従来のホスティング環境に戻すことを決定した場合に備えて、意図しない問題が発生する可能性をより一般的に減らすために、Azure BLOB ストレージをサポートするためにコードの変更をできるだけ少なくしたいと考えています。

この投稿に基づいて、Azure Drive は最善の方法ではないと判断しました。

誰かが私を正しい方向に導くことができますか (理想的には例を挙げて)? 私の考えている最善の解決策は、構成ファイルの変更のみを必要とするものです。しかし、それは現実的ではないと思います。

4

2 に答える 2

3

Indeed, you want to use Azure Blob storage to save your files.

As for your coding question, consider creating an interface, call it IFileStore:

public interface IFileStore
{
   void Save(string filePath, byte [] contents);
   byte [] Read(string filePath);
}

Then you create 2 provider classes, one for the file system, and one for Azure Blob storage.

The file system provider can implement the save function like this:

    public void Save(string filePath, byte [] content)
    {
        File.WriteAllBytes(filePath, content);
    }

    public byte [] Read(string filePath)
    {
        return File.ReadAllBytes(filePath);
    }

As for the Azure Blob provider, you will have to derive the storage path based on the filePath passed in to you.

于 2011-07-21T17:13:11.950 に答える
2

一般的

ストレージには、BlobストレージとTableストレージを使用することをお勧めします。これにより、複数のインスタンスがストレージに同時にアクセスできるようになります。コードを移植可能にするのを支援したい場合は、インターフェース/ APIの背後でコードを抽象化することをお勧めします(@Philppの回答を参照)。

例えば

  • ログファイルの例では、テーブルストレージを使用するのが最適な場合があります
  • 画像ファイルの場合、BLOBストレージを使用するのが最適な場合があります

本当にAzureDriveを使いたいのなら

自分のロールのインスタンスを1つだけデプロイする場合にのみ、AzureDriveを使用することをお勧めします。そうしないと、複数のインスタンス間でファイルを共有する際の問題と戦うことになります(また、1つのインスタンスで書き込みアクセスを使用してマウントできるのは1つのインスタンスのみであることに注意してください)。時間)

単一のインスタンスで操作していて、一時ファイルとログファイルのみを保存している場合は、Azureドライブの代わりにローカルストレージを使用することも検討できます。これは、BLOBストレージよりもはるかに簡単で安価です。たとえば、ログファイルの例で考えられる専門的な代替案の1つは、AzureDiagnosticsで制御されたローカルストレージのBlobストレージへのアップロードと一緒にローカルストレージを使用することを検討できることです。

于 2011-07-21T17:22:50.117 に答える