2011-07-21 7 views
2

かなり複雑なアプリケーションをWindows Azureに移行しようとしています。ワーカーロールとWebロールの両方で、アプリケーションがファイルをローカルファイルシステムに保存するインスタンスが多数あります。Azure BLOBストレージへのマイグレーションによるコードへの影響の軽減

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

thumbnail.Save(thumbnailFileName); 

と別の例:私たちは、画像を保存してはapp.configで指定された場所をファイルにログファイルをされているこれらの例では

using (System.IO.StreamWriter file = System.IO.File.AppendText(GetCurrentLogFilePath())) 
    { 
    string logEntry = String.Format("\r\n{0} - {1}: {2}", DateTime.Now.ToString("[email protected]"), type.ToString(), message); 
    file.Write(logEntry); 

    file.Close(); 
    } 

は、ここでの例です。ここでは例です:私たちが今までの可能性を減らすために戻って、より伝統的なホスティング環境に、より一般的に移動することを決定した場合には

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

私はAzureのブロブストレージをサポートするために、できるだけ少ないコードの変更をしたいのですが意図しない問題を引き起こす。

これに基づいて、post私はAzure Driveが最良の方法ではないと判断しました。

誰かが私を正しい方向に導くことができますか(理想的には例を挙げてください)?私の考えでは、設定ファイルを変更するだけです。しかし、私はそれが現実的ではないと推測しています。

答えて

3

確かに、Azure Blobストレージを使用してファイルを保存したいとします。あなたのコーディングの問題については

は、インターフェースの作成を検討し、IFileStoreそれを呼び出す:

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

その後、あなたは2つのプロバイダクラス、ファイルシステムに1つ、およびAzureブロブストレージのための1つを作成します。

ファイル・システム・プロバイダは、このような保存機能を実装することができます:Azureブロブプロバイダについては

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

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

を、あなたに渡さfilePathに基づいてストレージ・パスを導出する必要があります。お使いのストレージのために

2

一般

、私はブロブとテーブルのストレージを使用することをお勧めしたい - これは、複数のインスタンスが同時にストレージにアクセスできるようになります。コードをポータブルにするのを手助けしたいのであれば、インターフェイス/ APIの背後でコードを抽象化することをお勧めします(@ Philppの答え​​を参照)。

ログファイルの例

  • 、その後、テーブル記憶は、ブロブストレージは

を使用するのに最適なものになるかもしれない、あなたの画像ファイルの

  • を使用するのに最適なものになるかもしれませんAzureDriveを本当に使いたいのであれば

    私はたった一つのyoのインスタンスを展開するつもりならAzureDriveを使うことをお勧めしますurロール - そうでなければ、複数のインスタンス間でファイルを共有することで問題を解決することになります(そして、一度に1つのインスタンスしか書き込みアクセスでマウントすることはできません)。

    単一インスタンスで操作している場合一時ファイルとログファイルのみを格納するだけでなく、空白ドライブの代わりにローカルストレージを使用することもできます。ブロブストレージよりもはるかに簡単で安価です。例えばあなたのログファイルの例として、ローカルストレージをBlobストレージにAzure Diagnosticsによって制御された状態でアップロードすることを検討することもできます。

  • 関連する問題