es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Grpc.Core.RpcException: ‘Estado (Código de Estado = “No Disponible”, Detalle = “Error al iniciar llamada gRPC”)

Estaré inmensamente agradecido si me indicáis qué está causando el problema y cómo solucionarlo.

PD: Disculpen por publicar todo el código, solo que no estoy seguro de qué parte exacta es relevante para el problema.

Aquí está el texto completo de la excepción:

Grpc.Core.RpcException: ‘Status (StatusCode = “No disponible”, Detail = “Error al iniciar la llamada de gRPC. HttpRequestException: La conexión no se estableció porque la computadora de destino rechazó la solicitud de conexión. SocketException: No se estableció la conexión. la computadora de destino rechazó la solicitud de conexión. “, DebugException =” System.Net.Http.HttpRequestException: La conexión no se estableció porque la computadora de destino rechazó la solicitud de conexión.
—> System.Net.Sockets.SocketException (10061): Conexión no establecida porque la computadora de destino rechazó la solicitud de conexión.
en System.Net.Http.ConnectHelper.ConnectAsync (String host, Int32 port, CancellationToken cancellationToken)
— Final de la pila de excepciones internas —
en System.Net.Http.ConnectHelper.ConnectAsync (String host, Int32 port, CancellationToken cancellationToken)
en System.Net.Http.HttpConnectionPool.ConnectAsync (HttpRequestMessage solicitud, Boolean allowHttp2, CancellationToken cancellationToken)
en System.Net.Http.HttpConnectionPool.GetHttp2ConnectionAsync (HttpRequestMessage solicitud, CancellationToken cancellationToken)
en System.Net.Http.HttpConnectionPool.SendWithRetryAsync (HttpRequestMessage solicitud, Boolean doRequestAuth, CancellationToken cancellationToken)
en System.Net.Http.RedirectHandler.SendAsync (HttpRequestMessage solicitud, CancellationToken cancellationToken)
en Grpc.Net.Client.Internal.GrpcCall 2.RunCall (HttpRequestMessage request, Nullable 1 tiempo de espera) ">) & # 39;

Aquí está el código del servidor:

Program.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;

namespace GrpcHostServer
{
public class Program
{
public static void Main(string[] args)
{
CreateHostBuilder(args).Build().Run();
}

    public static IHostBuilder CreateHostBuilder(string[] args) =>
        Host.CreateDefaultBuilder(args)
            .ConfigureServices(services =>
            {
                services.AddHostedService <Worker>();
            });
}

}

Worker.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading;
using System.Threading.Tasks;
using GrpcHostServer.Services;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Server.Kestrel.Core;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging;

namespace GrpcHostServer
{
public class Worker: BackgroundService
{
private readonly ILogger < Worker & gt; _logger;

    public Worker(ILogger < Worker & gt; logger)
    {
        _logger = logger;
    }

    protected override async Task ExecuteAsync(CancellationToken stoppingToken)
    {
        await Host.CreateDefaultBuilder()
            .ConfigureWebHostDefaults(builder =>
            {
                builder
                    .ConfigureKestrel(options =>
                    {
                        options.ListenAnyIP(0, listenOptions =>
                        {
                            listenOptions.Protocols = HttpProtocols.Http2;
                        });
                    })
                    .UseKestrel()
                    .UseStartup <GrpcServerStartup & gt; ();
            })
            .Build()
            .StartAsync(stoppingToken);
    }
}

public class GrpcServerStartup
{
    public void ConfigureServices(IServiceCollection services)
    {
        services.AddGrpc();

        services.AddSingleton <GreeterService & gt; ();
    }

    public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
    {
        app.UseRouting();

        app.UseEndpoints(endpoints =>
        {
            endpoints.MapGrpcService <GreeterService & gt; ();
        });
    }
}

}

Aquí está el código del cliente

Program.cs

using Grpc.Net.Client;
using GrpcHostServer;
using System;
using System.Threading.Tasks;

namespace GrpcClient
{
class Program
{
static async Task Main(string[] args)
{
var input = new HelloRequest { Name = "Boris" };
var channel = GrpcChannel.ForAddress("https://localhost:5001");
var client = new Greeter.GreeterClient(channel);

        var reply = await client.SayHelloAsync(input);

        Console.WriteLine(reply.Message);

        Console.ReadLine();
    }
}

}

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    El mensaje de excepción indica que la conexión no se estableció porque la computadora de destino rechazó la solicitud de conexión. Esto podría deberse a varias razones, como una URL de servidor incorrecta, el servidor no funciona o el firewall bloquea la solicitud de conexión.

    Para solucionar el problema, puedes intentar lo siguiente:

    • Asegúrate de que el servidor esté funcionando y escuchando en la URL y puerto correctos.
    • Verifica si hay algún firewall que pueda estar bloqueando la solicitud de conexión.
    • Intenta acceder a la URL del servidor desde un navegador o usando una herramienta como Postman para ver si puedes establecer una conexión.
    • Asegúrate de que el código del cliente esté usando la URL y puerto correctos para conectarse al servidor. En este caso, es “https://localhost:5001”.
    • Asegúrate de que el cliente pueda establecer conexiones seguras (HTTPS) con el servidor.

Comments are closed.