首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >没有“Microsoft.AspNetCore.Hosting.Server.IServer”类型的服务在.Net核心3.1控制台应用程序中注册错误

没有“Microsoft.AspNetCore.Hosting.Server.IServer”类型的服务在.Net核心3.1控制台应用程序中注册错误
EN

Stack Overflow用户
提问于 2021-12-11 10:09:10
回答 1查看 604关注 0票数 0

我在.net内核3.1中有一个带有SignalR实现的控制台应用程序。我试图自己主持这个应用程序,但得到错误:例外:没有服务类型'Microsoft.AspNetCore.Hosting.Server.IServer‘已经注册。我正在尝试实现signalr功能。我有一个包含所有hub方法实现的MyHub类。在Program.cs中

代码语言:javascript
复制
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("In WebSocket");
              
        var hostBuilder = new WebHostBuilder()                  
                .UseUrls(url)
                .UseStartup<Startup>()
                .Build();

        hostBuilder.Run();
              
        Console.WriteLine("Server running on {0}", url);
        Console.ReadLine();
    }
    catch (Exception exc)
    {
        Console.WriteLine("In Websocket exception");
        Console.WriteLine(exc.Message);              
    }           
}

启动:

代码语言:javascript
复制
public class Startup
{
    public IConfiguration Configuration { get; }
    public Startup(IConfiguration configuration)
    {
        Configuration = configuration;
    }
    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");
        });
    }
}
EN

回答 1

Stack Overflow用户

发布于 2021-12-13 05:03:40

我认为您的代码应该引用.net框架自主机文档进行编码,但是您使用的是.net核心。

如果要在.net核心中使用它,请继续参考下列文档来定义和使用集线器。

在SignalR中为ASP.NET核心使用集线器

请注意问题,我的代码是从你那里复制的。我认为集线器的通路是错误的。

因为您的代码是从基于.net框架的signalr自主机获得的,所以路径是错误的。即使解决了当前错误,它也可能仍然不可用。

Startup.cs文件

代码语言:javascript
复制
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.HttpsPolicy;
using Microsoft.AspNetCore.SignalR;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;

namespace core_selfhost
{
    public class Startup
    {
        public IConfiguration Configuration { get; }
        public Startup(IConfiguration configuration)
        {
            Configuration = configuration;
        }
        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");
            });
        }
    
        public class MyHub : Hub
        {
            public void Send(string name, string message)
            {

                Clients.All.SendAsync(name, message);
            }
        }
    }
}

mohammadreza是正确的,如果您不太熟悉WebHostBuilder的配置,建议使用CreateDefaultBuilder。

按照你的步骤,我已经复制了问题。你可以检查下面的代码,它对我很有用。

代码语言:javascript
复制
 public static void Main(string[] args)
 {
     // CreateHostBuilder(args).Build().Run();
     Thread webThread = new Thread(webSocket);
     webThread.Start();
 }
 public static void webSocket()
 {
     IWebHost host = null;
     try
     {
         var url = "http://localhost:8080";
         Console.WriteLine("In WebSocket");

         var hostBuilder = new WebHostBuilder().UseUrls(url)
             .UseIISIntegration()
             .UseKestrel()
             .UseStartup<Startup>()
             .Build();

         hostBuilder.Run();

         Console.WriteLine("Server running on {0}", url);
         Console.ReadLine();
     }
     catch (Exception exc)
     {
         Console.WriteLine("In Websocket exception");
         Console.WriteLine(exc.Message);
     }
 }

测试结果

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70314244

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档