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

Flutter移动端调用C#编写的gRPC服务抛出UNAVAILABLE错误如何解决?

问题原因

ClientChannel构造参数传入的地址携带了https://协议前缀,gRPC客户端会将整段字符串当做主机名执行DNS解析,无法匹配到对应的IP地址,因此抛出主机查找失败的错误。

解决方案
  • 第一步:移除地址中的协议前缀,仅保留域名部分,参考修改后的代码:
Future<void> login(email, password) async {
  // 仅保留域名,去掉https://前缀
  final channel = ClientChannel('abc.service.domain.com');
  final stub = AuthenticationClient(channel);

  var request = LoginRequest()
    ..email = email
    ..password = password;
  var response = await stub.login(request);
  print(response);
  // 用完建议关闭通道释放资源
  await channel.shutdown();
}
  • 如果你的gRPC服务使用非443端口,需要显式指定端口,默认TLS连接配置参考如下:
final channel = ClientChannel(
  'abc.service.domain.com',
  port: 50051, // 替换为你的服务实际暴露端口
  options: const ChannelOptions(credentials: ChannelCredentials.secure()),
);
  • 如果服务使用自签名证书,需要手动传入证书配置:
// 提前将证书文件放入项目assets目录,在pubspec.yaml中完成资源声明
final cert = await rootBundle.load('assets/service_cert.crt');
final channel = ClientChannel(
  'abc.service.domain.com',
  port: 50051,
  options: ChannelOptions(
    credentials: ChannelCredentials.secure(
      certificates: cert.buffer.asUint8List(),
    ),
  ),
);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.11 15:51:02