You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Google.Cloud.Translate.V3调用报GRPC Failed to pick subchannel错误排查求助

问题根因定位

两个报错本质都是代理配置不生效导致的连接失败,curl/gcloud能正常调用是因为这类工具默认会主动读取系统/环境变量的代理规则,而你用到的两个客户端(gRPC官方SDK、HttpWebRequest)都没有正确加载代理配置。

排查&解决步骤

1. 优先修复Google.Cloud.Translate.V3 gRPC SDK的代理配置

Grpc.Core默认不会自动加载http_proxy/https_proxy环境变量,需要手动给Channel配置代理参数,代码修改如下:

// 手动构造带代理配置的Channel
var channelOptions = new List<ChannelOption>
{
    new ChannelOption("grpc.http_proxy", "你的代理地址:端口"),
    // 如果代理需要认证,加下面两行
    new ChannelOption("grpc.http_proxy_user", "代理用户名"),
    new ChannelOption("grpc.http_proxy_pass", "代理密码")
};
// 构造TranslationServiceClient的时候指定自定义Channel
var builder = new TranslationServiceClientBuilder
{
    ChannelOptions = channelOptions,
    // 如果你用服务账号密钥的话这里加上CredentialsPath = "你的密钥文件路径"
};
TranslationServiceClient client = builder.Build();
// 后面的请求逻辑和原来一致

配置完成后先测试gRPC调用是否能正常返回,优先用官方SDK避免自己封装HTTP请求的鉴权、参数兼容问题。

2. 如果要使用自行封装的HTTP请求方案,需要显式给HttpWebRequest配置代理

HttpWebRequest默认不会自动使用系统代理,也不会读取环境变量的代理配置,需要手动给请求对象设置Proxy属性:

var wq = HttpWebRequest.Create(uri);
// 手动设置代理
wq.Proxy = new WebProxy("你的代理地址:端口", true)
{
    // 如果代理需要认证的话加下面这行
    Credentials = new NetworkCredential("代理用户名", "代理密码")
};
// 后面的请求头、请求体逻辑和原来一致

另外你提到的TLS协议配置可以保留TLS1.2的配置,避免协议兼容问题:

ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;

3. 额外验证步骤

如果配置完代理还是报错,可以先在服务器上抓包,确认请求的目标地址是否正确指向了代理服务器,而不是直接尝试连接谷歌的公网IP。另外确认代理服务器的规则是否允许443端口的HTTPS、gRPC流量通过,没有额外的域名或者请求头拦截规则。

内容的提问来源于stack exchange,提问作者NoopikxD

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 07:06:04