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.

Error: No se ha registrado ningún servicio para el tipo ‘Microsoft.AspNetCore.Hosting.Server.IServer’ en la aplicación de consola de .Net Core 3.1.

Tengo una aplicación de consola en .net core 3.1 con implementación de SignalR. Estoy intentando alojar la aplicación pero obtengo el siguiente error:

EXCEPCIÓN: No se ha registrado ningún servicio para el tipo ‘Microsoft.AspNetCore.Hosting.Server.IServer’.

Estoy intentando implementar una funcionalidad de SignalR. Tengo una clase MyHub con la implementación de todos los métodos de hub.

En Program.cs

static void Main(string[] args)
{
    Thread webThread = new Thread(webSocket);
    webThread.Start();
}

public static void webSocket()
{
    IWebHost host = null;
    try
    {
        var url = "http://localhost:5001";
        Console.WriteLine("En WebSocket");

        var hostBuilder = new WebHostBuilder()                  
                .UseUrls(url)
                .UseStartup<startup>()
                .Build();

        hostBuilder.Run();

        Console.WriteLine("Servidor en ejecución en {0}", url);
        Console.ReadLine();
    }
    catch (Exception exc)
    {
        Console.WriteLine("En excepción de WebSocket");
        Console.WriteLine(exc.Message);              
    }           
}

Startup:

“`csharp
public class Startup
{
public IConfiguration Configuration { get; }
public Startup(IConfiguration configuration)
{
Configuration = configuration;
}

<pre><code>public void ConfigureServices(IServiceCollection services)
{
services.AddSignalR();
// services.AddControllers();
// services.AddMvcCore();
// return services.BuildServiceProvider();
}

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
app.UseRouting();
// app.UseHttpsRedirection();
// app.UseCors();
app.UseEndpoints(endpoints =>
{
// endpoints.MapControllers();
endpoints.MapHub<myhub>("signalr/myHub");
});
}
</code></pre>

}
“`

Tags:  , ,

Answer

  1. Avatar for davy.ai

    El mensaje de error sugiere que la aplicación no puede encontrar la implementación de la interfaz IServer, la cual es necesaria para el auto-alojamiento. Para solucionar esto, debes registrar la implementación del servidor en el contenedor de inyección de dependencias.

    En tu archivo Program.cs, actualiza el código de la siguiente manera:

    static void Main(string[] args)
    {
        CreateHostBuilder(args).Build().Run();
    }
    
    public static IHostBuilder CreateHostBuilder(string[] args) =>
        Host.CreateDefaultBuilder(args)
            .ConfigureWebHostDefaults(webBuilder =>
            {
                webBuilder.UseUrls("https://localhost:5001")
                .UseStartup<startup>();
            });
    

    En el método ConfigureServices del archivo Startup.cs, agrega la siguiente línea:

    services.AddSignalR().AddAzureSignalR();
    

    Esto registrará el servicio SignalR en el contenedor de inyección de dependencias y también agregará el servicio Azure SignalR.

    Además, deberías agregar la siguiente línea al método Configure del archivo Startup.cs:

    app.Use(async (context, next) =>
    {
        context.Request.Scheme = "https";
        await next();
    });
    

    Esto establece el esquema como HTTPS, lo cual es necesario para SignalR.

    Después de realizar estos cambios, ejecuta la aplicación e intenta el auto-alojamiento nuevamente. El error debería resolverse y la funcionalidad de SignalR debería funcionar.

Comments are closed.