我开发了一个简单的ASP .NET 6后端服务器,它通过gRPC提供服务。我还编写了一个基本的WPF桌面应用程序和一个简单的.NET MAUI应用程序(为安卓设备配置)作为客户端应用程序。
我开始我的服务如下:
public static IHostBuilder CreateHostBuilder(string[] args)
{
var configuration = ServiceFactory.Instance.GetConfiguration();
return Host.CreateDefaultBuilder(args).ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.ConfigureKestrel(options =>
{
options.Listen(configuration.IPAddress, configuration.HttpPort);
options.Listen(configuration.IPAddress, configuration.HttpsPort, configure => configure.UseHttps());
});
webBuilder.UseStartup<Startup>();
});
}服务器应用程序启动得很好。

桌面客户端工作
在启动WPF桌面应用程序时,我使用以下代码连接到服务器并运行最基本的服务函数: Ping。它是一个函数,它总是带一个有效的响应对象返回,它作为一个测试,如果服务器是活动的,我也可以测试一般服务调用是否工作。
_grpcChannel = GrpcChannel.ForAddress("https://127.0.0.1:5005/", new GrpcChannelOptions()
{
MaxReceiveMessageSize = 16 * 1024 * 1024,
MaxSendMessageSize = 16 * 1024 * 1024,
HttpHandler = new HttpClientHandler
{
ServerCertificateCustomValidationCallback = HttpClientHandler.DangerousAcceptAnyServerCertificateValidator
}
});
_authenticationClient = new AuthenticationClient(_grpcChannel);
_authenticationClient.Ping(new PingRequest());移动客户端不工作
这完全和预期的一样。然而,当我在我的.NET MAUI应用程序中使用下面的代码时,它就失败了。
_grpcChannel = GrpcChannel.ForAddress("http://127.0.0.1:5000/", new GrpcChannelOptions()
{
MaxReceiveMessageSize = 16 * 1024 * 1024,
MaxSendMessageSize = 16 * 1024 * 1024
});
_authenticationClient = new AuthenticationClient(_grpcChannel);
_authenticationClient.Ping(new PingRequest());我使用HTTP而不是HTTPS,因为HTTPS显然存在问题,没有有效的SSL证书,例如在本地测试时。我读过这个这里。
在我的gRPC应用程序中创建.NET通道确实有效,我还可以创建一个AuthenticationClient实例。但是,当我调用Ping服务函数时,我得到了这个。
{Grpc.Core.RpcException: Status(StatusCode="Unavailable", Detail="Error connecting to subchannel.", DebugException="System.Net.Sockets.SocketException (111): Connection refused
at System.Net.Sockets.Socket.AwaitableSocketAsyncEventArgs.ThrowException(SocketError error, CancellationToken cancellationToken)
at System.Net.Sockets.Socket.AwaitableSocketAsyncEventArgs.System.Threading.Tasks.Sources.IValueTaskSource.GetResult(Int16 token)
at System.Net.Sockets.Socket.<ConnectAsync>g__WaitForConnectWithCancellation|277_0(AwaitableSocketAsyncEventArgs saea, ValueTask connectTask, CancellationToken cancellationToken)
at Grpc.Net.Client.Balancer.Internal.SocketConnectivitySubchannelTransport.TryConnectAsync(ConnectContext context) in /_/src/Grpc.Net.Client/Balancer/Internal/SocketConnectivitySubchannelTransport.cs:line 140")
at Grpc.Net.Client.Balancer.Internal.ConnectionManager.PickAsync(PickContext context, Boolean waitForReady, CancellationToken cancellationToken) in /_/src/Grpc.Net.Client/Balancer/Internal/ConnectionManager.cs:line 352
at Grpc.Net.Client.Balancer.Internal.BalancerHttpHandler.SendAsync(HttpRequestMessage request, CancellationToken cancellationToken) in /_/src/Grpc.Net.Client/Balancer/Internal/BalancerHttpHandler.cs:line 109
at Grpc.Net.Client.Internal.GrpcCall`2.<RunCall>d__73[[Engine.Server.Contracts.PingRequest, Engine.Server.Contracts, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null],[Engine.Server.Contracts.PingResponse, Engine.Server.Contracts, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]].MoveNext() in /_/src/Grpc.Net.Client/Internal/GrpcCall.cs:line 493
at Grpc.Net.Client.Internal.HttpClientCallInvoker.BlockingUnaryCall[PingRequest,PingResponse](Method`2 method, String host, CallOptions options, PingRequest request) in /_/src/Grpc.Net.Client/Internal/HttpClientCallInvoker.cs:line 116
at Grpc.Core.Interceptors.InterceptingCallInvoker.<BlockingUnaryCall>b__3_0[PingRequest,PingResponse](PingRequest req, ClientInterceptorContext`2 ctx) in /_/src/Grpc.Core.Api/Interceptors/InterceptingCallInvoker.cs:line 51
at Grpc.Core.ClientBase.ClientBaseConfiguration.ClientBaseConfigurationInterceptor.BlockingUnaryCall[PingRequest,PingResponse](PingRequest request, ClientInterceptorContext`2 context, BlockingUnaryCallContinuation`2 continuation) in /_/src/Grpc.Core.Api/ClientBase.cs:line 174
at Grpc.Core.Interceptors.InterceptingCallInvoker.BlockingUnaryCall[PingRequest,PingResponse](Method`2 method, String host, CallOptions options, PingRequest request) in /_/src/Grpc.Core.Api/Interceptors/InterceptingCallInvoker.cs:line 48
at Engine.Server.Contracts.Authentication.AuthenticationClient.Ping(PingRequest request, CallOptions options) in [a path]\obj\Debug\net6.0\AuthenticationGrpc.cs:line 316
at Engine.Server.Contracts.Authentication.AuthenticationClient.Ping(PingRequest request, Metadata headers, Nullable`1 deadline, CancellationToken cancellationToken) in [a path]\obj\Debug\net6.0\AuthenticationGrpc.cs:line 306不幸的是,一项网络研究并没有揭示多少,我是非常新的.NET毛伊岛开发。任何帮助都是非常感谢的。
https://stackoverflow.com/questions/73697104
复制相似问题