.Net core 3.1 控制台应用程序中没有“Microsoft.AspNetCore.Hosting.Server.IServer”类型的服务已注册错误
Posted
技术标签:
【中文标题】.Net core 3.1 控制台应用程序中没有“Microsoft.AspNetCore.Hosting.Server.IServer”类型的服务已注册错误【英文标题】:No service for type 'Microsoft.AspNetCore.Hosting.Server.IServer' has been registered error in .Net core 3.1 console app 【发布时间】:2022-01-15 17:17:32 【问题描述】:我在 .net core 3.1 中有一个带有 SignalR 实现的控制台应用程序。我正在尝试自行托管应用程序,但出现错误: 例外:没有注册类型“Microsoft.AspNetCore.Hosting.Server.IServer”的服务。 我正在尝试实现信号器功能。我有一个包含所有集线器方法实现的 MyHub 类。 在 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("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);
启动:
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");
);
【问题讨论】:
为什么不使用默认的builder静态方法:Host.CreateDefaultBuilder
【参考方案1】:
我认为您的代码应该参考the .net framework self-host 文档进行编码,但您使用的是.net core。
如果想在.net core中使用,hub的定义和使用请继续参考以下文档。
Use hubs in SignalR for ASP.NET Core
请注意一个问题,我的代码是从你那里复制的。我觉得是hub的访问路径不对。
由于你的代码是从基于.net框架的signalr自托管获取的,路径错误。即使当前错误已解决,它仍可能不可用。
Startup.cs 文件
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。
按照您的步骤,我已经重现了问题。你可以查看下面的代码,它对我很有用。
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);
测试结果
【讨论】:
你能展示一下你的入门课程吗? @snehalgiramkar 当然,请稍候。 @snehalgiramkar 我仔细检查了你的代码,通过我的步骤你可以解决当前的问题,但是可能是hub路径有问题。 是的,现在网络主机工作正常。但是 signalR Myhub 无法正常工作。你能帮忙实现 Hub 方法吗?现在我在 MyHub 类的 Send 方法上遇到错误以上是关于.Net core 3.1 控制台应用程序中没有“Microsoft.AspNetCore.Hosting.Server.IServer”类型的服务已注册错误的主要内容,如果未能解决你的问题,请参考以下文章
TakeLast 在 .net core 3.1 中无法按预期工作
.net core 3.1将ajax对象列表发布到MVC控制器没有数据到达
在 .NET Core 3.1 中使用 ImageSource?