1
string uri = "myurl";
string blobstatus = GetBlobStatus(uri);
if (blobstatus != LeaseStatus.Locked.ToString())
{
    string response = AquireBlob(uri);
    //process data.
    string abc = ":em";
    ReleaseBlob(response, uri);
}

上記は、ブロブのロックをリースおよび解放するための私のコードです。x複数のインスタンスが同時にコードを実行できるため、時間間隔の後に特定のコードを実行するマルチインスタンス ワーカー ロールに使用するこのメソッドを検討しています。

問題は、LeaseId適切に取得できたことですが、2 番目のインスタンスが BLOB のリース ステータスをチェックすると、常に指定されていないことです。なぜそうなのですか?手がかりはありますか?

有利なスタートを切るために、次のリンクをたどりました。

ストレージ クライアント ライブラリを使用した Windows Azure BLOB のリース - blog.smarx.com

4

2 に答える 2

7

あなたのアプローチは、最初にブロブのステータスを確認し、それに基づいてリースを取得するかどうかを決定することに頼るべきではないと思います。常にリースを取得して、そのプロセスでスローされた例外をキャプチャする必要があります。そうすれば、このコードがマルチインスタンス環境で実行されている場合、1 つのインスタンスのみがリースを取得できます (他のインスタンスはエラーをスローします)。

于 2012-11-01T13:00:31.813 に答える
-2

良い提案..私は問題を解決しました。実際、LeaseStatus プロパティは適切ではなく、結果を返さないことがわかりました。Webリクエストを入れてステータスを取得する必要があり、正しい結果を得ることができました。

于 2012-11-05T07:57:58.190 に答える