如何修复GrpcChannel报No address resolver configured for the scheme 'wss'错误
解决GrpcChannel使用wss前缀报错的问题
问题原因
GrpcChannel默认未注册wss协议的地址解析器,无法识别该协议方案,因此抛出No address resolver configured for the scheme 'wss'异常。
解决方案
方法1:使用GrpcWeb over WebSocket(推荐)
通过配置GrpcWebHandler适配WebSocket传输,满足服务对wss协议的要求:
- 安装必要NuGet包:
Install-Package Grpc.Net.Client Install-Package Grpc.Net.Client.Web Install-Package System.Net.Http.WebSocketHandler - 修改代码配置通道:
// 创建支持wss的WebSocket处理器 var webSocketHandler = new WebSocketHandler(); // 配置GrpcWeb处理器,指定WebSocket模式 var grpcWebHandler = new GrpcWebHandler(GrpcWebMode.WebSocket, webSocketHandler); // 绑定自定义处理器到HttpClient var httpClient = new HttpClient(grpcWebHandler); // 创建GrpcChannel并使用配置好的HttpClient var channel = GrpcChannel.ForAddress("wss://someservice.com:443", new GrpcChannelOptions { HttpClient = httpClient });
方法2:注册wss地址解析器
直接为wss协议复用https的地址解析逻辑,让GrpcChannel识别该协议:
// 注册wss协议的地址解析器 AddressResolverRegistry.Instance.Register("wss", new HttpsAddressResolver()); // 正常创建通道即可 var channel = GrpcChannel.ForAddress("wss://someservice.com:443", new GrpcChannelOptions());
注意事项
- 确认服务端已开启gRPC over WebSocket(wss协议)支持,否则配置后仍无法正常连接
- 若使用.NET WebAssembly(Blazor WASM),默认GrpcChannel已支持wss,仅需确认依赖包版本
内容的提问来源于stack exchange,提问作者bboyle1234
相关产品推荐
相关产品推荐

