Mac M1启动Dotnet Isolated Azure Function遇Grpc.Core.RpcException错误
排查Mac M1上.NET Isolated模式Azure Functions启动gRPC错误的建议
以下是针对你遇到的Grpc.Core.RpcException: Status(StatusCode="Unavailable", Detail="Error starting gRPC call... Broken pipe")错误的具体排查步骤:
1. 切换HTTP/1.1通信绕过gRPC HTTP/2兼容性问题
M1芯片环境下,gRPC的HTTP/2握手可能存在适配问题,可强制Worker与Host使用HTTP/1.1通信:
修改local.settings.json,在Values节点添加配置项:
"FUNCTIONS_WORKER_RPC_USE_HTTP": "true"
修改后的完整配置:
{ "IsEncrypted": false, "Values": { "AzureWebJobsStorage": "UseDevelopmentStorage=true", "FUNCTIONS_WORKER_RUNTIME": "dotnet-isolated", "FUNCTIONS_WORKER_RPC_USE_HTTP": "true" } }
2. 更新.NET Isolated包版本以兼容Core Tools
你的项目中Microsoft.Azure.Functions.Worker(1.8.0)和Microsoft.Azure.Functions.Worker.Sdk(1.7.0)版本较旧,与Functions Core Tools v4存在兼容风险。建议升级到最新稳定兼容版本:
修改.csproj中的包引用版本:
<PackageReference Include="Microsoft.Azure.Functions.Worker" Version="1.14.1" /> <PackageReference Include="Microsoft.Azure.Functions.Worker.Extensions.Http" Version="3.1.0" /> <PackageReference Include="Microsoft.Azure.Functions.Worker.Sdk" Version="1.10.0" />
执行命令更新依赖:
dotnet restore
3. 验证.NET运行时架构适配M1芯片
检查.NET是否安装了arm64架构版本:
dotnet --info
查看输出中的Runtime Architecture字段,确保显示为arm64。如果是x64,卸载现有.NET后重新下载安装arm64版本的.NET 6 SDK。
4. 排查端口冲突问题
启动日志显示函数监听7071,但launchSettings.json指定的是7146,可能存在端口未生效或被占用的情况:
- 检查7071端口占用情况:
lsof -i :7071
- 手动指定端口启动函数:
func start --port 7146
5. 清理项目缓存并重新构建
执行以下命令清理旧缓存并重新生成项目:
dotnet clean rm -rf bin obj dotnet build func start
内容的提问来源于stack exchange,提问作者Diny
相关产品推荐
相关产品推荐

