.NET MAUI调用gRPC服务抛出Grpc.Core.RpcException求助
解决.NET MAUI安卓客户端无法连接本地ASP.NET 6 gRPC服务的问题
问题背景
基于ASP.NET 6开发的gRPC后端服务启动正常,WPF客户端通过HTTPS地址(https://127.0.0.1:5005/)可成功调用Ping测试接口,但.NET MAUI安卓客户端使用HTTP地址(http://127.0.0.1:5000/)调用时,抛出Grpc.Core.RpcException,错误提示连接被拒绝(SocketException 111)。
解决方案
1. 修改gRPC服务的监听地址
ASP.NET 6默认仅监听localhost,导致局域网内的安卓模拟器无法访问。需配置服务监听所有网络接口:
在服务的Program.cs中添加地址配置:
var builder = WebApplication.CreateBuilder(args); // 让服务监听所有IP的HTTP和HTTPS端口 builder.WebHost.UseUrls("http://0.0.0.0:5000", "https://0.0.0.0:5005"); builder.Services.AddGrpc(); var app = builder.Build(); app.MapGrpcService<AuthenticationService>(); app.Run();
2. 替换MAUI客户端的连接地址
安卓模拟器中的127.0.0.1指向模拟器自身,而非开发主机,需替换为模拟器专属的主机映射地址:
- Android Studio模拟器:使用
10.0.2.2 - Genymotion模拟器:使用
10.0.3.2
修改MAUI客户端的通道创建代码:
_grpcChannel = GrpcChannel.ForAddress("http://10.0.2.2:5000/", new GrpcChannelOptions() { MaxReceiveMessageSize = 16 * 1024 * 1024, MaxSendMessageSize = 16 * 1024 * 1024 }); _authenticationClient = new AuthenticationClient(_grpcChannel); _authenticationClient.Ping(new PingRequest());
3. 配置MAUI安卓的网络权限
确保安卓应用拥有网络访问权限,在Platforms/Android/AndroidManifest.xml中添加权限声明:
<manifest ...> <uses-permission android:name="android.permission.INTERNET" /> <!-- 其他权限配置 --> </manifest>
4. 验证服务的HTTP gRPC支持
确认gRPC服务在HTTP端口正常运行:
- 启动服务后,在开发主机上使用
grpcurl工具测试(需提前安装):
grpcurl -plaintext localhost:5000 list
若能列出gRPC服务接口,说明HTTP模式下服务正常。
5. 检查网络连通性
在安卓模拟器的浏览器中访问http://10.0.2.2:5000(Android Studio模拟器),若能打开服务页面,说明网络连通正常;若无法访问,需检查主机防火墙是否允许5000端口的入站连接。
内容的提问来源于stack exchange,提问作者GameDevAlien
相关产品推荐
相关产品推荐

