具有 dotnet 隔离的 Az 功能的提琴手 - 启动 gRPC 调用时出错
Posted
技术标签:
【中文标题】具有 dotnet 隔离的 Az 功能的提琴手 - 启动 gRPC 调用时出错【英文标题】:Fiddler with dotnet-isolated Az Function - Error starting gRPC call 【发布时间】:2021-10-13 21:11:36 【问题描述】:我在 VS2019 中有一个 C# dotnet 5 Azure 函数,配置为“FUNCTIONS_WORKER_RUNTIME”:“dotnet-isolated”。
如果我在 Fiddler 运行时在开发环境 (ctrl + F5) 中运行该函数,则会收到以下错误:
Grpc.Core.RpcException: Status(StatusCode="Internal", Detail="Error starting gRPC call. HttpRequestException: Requesting HTTP version 2.0 with version policy RequestVersionOrHigher while HTTP/2 is not enabled.
如果 Fiddler 没有运行,该函数将正常运行。
有人知道如何解决这个问题吗?
【问题讨论】:
在下面的参考SO线程***.com/questions/66500195/…建议的本地开发的解决方法是在进行gRPC调用之前手动设置HttpClient的默认代理 【参考方案1】:谢谢@venkatesh。发布您的建议作为帮助其他社区成员的答案。
此错误与您机器网络上的代理设置有关。
.NET 从这些环境变量中填充 HttpClient DefaultProxy。您的代理可能会干扰 HTTP/2,从而阻止 gRPC 正常工作。
本地开发的解决方法是在进行 gRPC 调用之前手动设置 HttpClient 的默认代理:
HttpClient.DefaultProxy = new WebProxy();
【讨论】:
调用 grpc 的是 Functions 运行时【参考方案2】:我使用的是 CharlesProxy,问题是一样的。在Program.cs
中添加HttpClient.DefaultProxy = new WebProxy();
可以解决问题并启动功能。但是,您不会看到该函数发出的传出请求。这就是为什么我要运行代理来检查所有传出请求的想法。也许有人解决它?
【讨论】:
以上是关于具有 dotnet 隔离的 Az 功能的提琴手 - 启动 gRPC 调用时出错的主要内容,如果未能解决你的问题,请参考以下文章
将 dotnet 隔离的进程 Azure Function 从 .net 5 迁移到 .net 6