我将压缩文件上传到 Azure 存储容器(输入)。然后我有一个 WebJob,它应该拾取 Blob,解压缩它们并将它们放入另一个容器(输出)。两个容器使用相同的存储帐户。
我的问题是它不能处理所有 Blob。它似乎总是错过 1。今天早上,我将 11 个 blob 上传到输入容器,只有 10 个被处理并转储到输出容器中。如果我上传 4 则 3 将被处理。即使已上传 11 个 blob,仪表板仍将显示 10 个调用。看起来它不会被第 11 个 blob 触发。如果我只上传 1 它似乎会处理它。
我在标准模式下运行网站,并将 Always On 设置为 true。
我努力了:
- 编写 Azure 示例 ( https://github.com/Azure/azure-webjobs-sdk-samples ) 之类的代码。
- 编写与本文中的代码类似的代码 ( http://azure.microsoft.com/en-us/documentation/articles/websites-dotnet-webjobs-sdk-get-started )。
- 使用 Streams 代替 CloudBlockBlobs 进行输入和输出。
- 关闭输入、输出和 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);
}
}