gzip 圧縮されたファイルを Azure ストレージ コンテナーにアップロードします (入力)。次に、Blob を取得して解凍し、別のコンテナー (出力) にドロップする WebJob があります。どちらのコンテナーも同じストレージ アカウントを使用します。
私の問題は、すべてのブロブを処理しないことです。常に 1 つが欠落しているようです。今朝、11 個の BLOB を入力コンテナーにアップロードしましたが、処理されて出力コンテナーにダンプされたのは 10 個だけでした。4 をアップロードすると、3 が処理されます。11 個の BLOB がアップロードされているにもかかわらず、ダッシュボードには 10 個の呼び出しが表示されます。11 番目のブロブでトリガーされるようには見えません。1つだけアップロードすると、それを処理するようです。
Always On を true に設定して、標準モードで Web サイトを実行しています。
私が試してみました:
- Azure サンプル ( https://github.com/Azure/azure-webjobs-sdk-samples ) のようなコードを記述します。
- この記事 ( http://azure.microsoft.com/en-us/documentation/articles/websites-dotnet-webjobs-sdk-get-started )のコードのようなコードを記述します。
- CloudBlockBlobs の代わりに、入力と出力に Streams を使用します。
- 入力、出力、および Gzip ストリームを閉じるさまざまな組み合わせ。
- Unzip メソッドに UnzipData コードを含める。
これは私の最新のコードです。私は何か間違ったことをしていますか?
public class Functions
{
public static void Unzip(
[BlobTrigger("input/{name}.gz")] CloudBlockBlob inputBlob,
[Blob("output/{name}")] CloudBlockBlob outputBlob)
{
using (Stream input = inputBlob.OpenRead())
{
using (Stream output = outputBlob.OpenWrite())
{
UnzipData(input, output);
}
}
}
public static void UnzipData(Stream input, Stream output)
{
GZipStream gzippedStream = null;
gzippedStream = new GZipStream(input, CompressionMode.Decompress);
gzippedStream.CopyTo(output);
}
}