Microsoft.Azure.WebJobs.Blob扩展是否生成非空流?函数遇空流报错
问题分析与解决方案
核心问题
你代码里混合了Azure Functions两种不兼容的绑定模型:
[Microsoft.Azure.Functions.Worker.BlobTrigger]属于隔离进程(Isolated Worker)模型的绑定[Microsoft.Azure.WebJobs.Blob]属于进程内(In-Process)模型的绑定
这两个模型的绑定系统互不兼容,导致写入Blob的blobStream2无法被框架正确初始化,最终出现null值,触发ArgumentNullException。
解决方案
根据你项目实际使用的模型,二选一修改代码:
方案1:统一使用隔离进程模型绑定
隔离进程模型中,写入Blob需用[BlobOutput]绑定(来自Microsoft.Azure.Functions.Worker命名空间),修改后代码如下:
using Microsoft.Azure.Functions.Worker; using System.IO; using System.Threading.Tasks; namespace Wpm { public class ThumbnailCreator { [Function(nameof(ThumbnailCreator))] public static async Task Run( [BlobTrigger("photos/{name}", Connection = "WpmStorage")] Stream blobStream1, [BlobOutput("thumbnails/{name}", Connection = "WpmStorage")] Stream blobStream2) { await blobStream1.CopyToAsync(blobStream2); } } }
同时确认项目已安装Microsoft.Azure.Functions.Worker.Extensions.Storage.Blobs NuGet包,版本与Functions SDK匹配。
方案2:统一使用进程内模型绑定
如果你的项目是进程内模型(项目文件引用Microsoft.NET.Sdk.Functions包),则全部使用Microsoft.Azure.WebJobs命名空间下的绑定:
using Microsoft.Azure.WebJobs; using System.IO; using System.Threading.Tasks; namespace Wpm { public class ThumbnailCreator { [FunctionName(nameof(ThumbnailCreator))] public static async Task Run( [BlobTrigger("photos/{name}", Connection = "WpmStorage")] Stream blobStream1, [Blob("thumbnails/{name}", FileAccess.Write, Connection = "WpmStorage")] Stream blobStream2) { await blobStream1.CopyToAsync(blobStream2); } } }
注意这里要把[Function]替换为[FunctionName],并确保安装Microsoft.Azure.WebJobs.Extensions.Storage NuGet包。
额外验证步骤
- 确认项目模型类型:查看
.csproj文件,若引用Microsoft.Azure.Functions.Worker则是隔离进程模型;若引用Microsoft.NET.Sdk.Functions则是进程内模型。 - 检查
WpmStorage连接字符串:确保local.settings.json(本地调试)或Azure函数应用配置(云端)中已正确配置,且该字符串对应的存储账户有Blob读写权限。
内容的提问来源于stack exchange,提问作者Richard210363
相关产品推荐
相关产品推荐

