我在.net内核3.1中有一个带有SignalR实现的控制台应用程序。我试图自己主持这个应用程序,但得到错误:例外:没有服务类型'Microsoft.AspNetCore.Hosting.Server.IServer‘已经注册。我正在尝试实现signalr功能。我有一个包含所有hub方法实现的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");
});
}
}发布于 2021-12-13 05:03:40
我认为您的代码应该引用.net框架自主机文档进行编码,但是您使用的是.net核心。
如果要在.net核心中使用它,请继续参考下列文档来定义和使用集线器。

请注意问题,我的代码是从你那里复制的。我认为集线器的通路是错误的。
因为您的代码是从基于.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);
}
}测试结果

https://stackoverflow.com/questions/70314244
复制相似问题