.NET 6 C#调用Google Text-to-Speech在Win7抛出HttpRequestException求助
解决方案:Windows 7上.NET 6调用Google Text-to-Speech API的HTTP/2连接问题
问题根源
Windows 7原生对HTTP/2的支持存在限制,而.NET 6默认会让gRPC客户端尝试使用HTTP/2与Google API建立连接,导致在Win7上无法建立有效连接,抛出请求版本不匹配的异常。
具体解决办法
强制gRPC客户端使用HTTP/1.1
直接修改GrpcChannel的配置,指定使用HTTP 1.1版本,绕过HTTP/2的兼容性问题。示例代码:using Grpc.Net.Client; using Google.Cloud.TextToSpeech.V1; using System.Net.Http; using System.Net; // 创建自定义HTTP处理器和通道配置 var httpHandler = new HttpClientHandler(); // 可选:如果遇到证书验证问题,临时关闭(生产环境建议使用合法证书) httpHandler.ServerCertificateCustomValidationCallback = HttpClientHandler.DangerousAcceptAnyServerCertificateValidator; var channelOptions = new GrpcChannelOptions { HttpHandler = httpHandler, HttpRequestMessageOptions = new HttpRequestMessageOptions { Version = HttpVersion.Version11, VersionPolicy = HttpVersionPolicy.RequestVersionExact } }; // 初始化TextToSpeech客户端 var channel = GrpcChannel.ForAddress("https://texttospeech.googleapis.com", channelOptions); var textToSpeechClient = new TextToSpeechClient(channel); // 后续调用客户端方法即可补全Windows 7必要补丁
Win7需要安装以下补丁才能支持TLS 1.2和基础的HTTP/2功能:- KB3065988:启用TLS 1.2作为默认协议
- KB3154518:修复HTTP/2相关组件的兼容性问题
安装后,还需通过注册表启用强加密:
- 打开注册表编辑器,导航到
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\v4.0.30319 - 添加DWORD值
SchUseStrongCrypto,设置为1 - 同样在
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\.NETFramework\v4.0.30319下添加相同值
确保使用Win7兼容的.NET 6版本
.NET 6从6.0.22版本开始不再支持Windows 7,需安装6.0.21或更早的.NET 6 Desktop Runtime版本,避免因runtime本身的兼容性问题导致异常。备选:降级Google Cloud库版本
部分早期版本的Google.Cloud.TextToSpeech.V1库对Win7的兼容性更好,可尝试降级到v2.0.0左右的版本(需自行测试功能完整性),但此方法仅作为临时方案,旧版本可能缺少安全更新。
内容的提问来源于stack exchange,提问作者mangelro
相关产品推荐
相关产品推荐

