docker中.NET Core 2.1的信号器在将项目移动到新PC后不工作 更新:已解决(阅读下文)
我在PC1上创建了这个项目。当我找到信号员时,我已经做了一段时间了。在实现并使SignalR正常工作后,我必须移动到一台新的PC上,因此我保存了项目文件夹并将其移动到新的PC上。我安装了Docker for Windows、.NET Core 2.1 SDK和VS。我将项目放在同一个文件夹中(C:\users\xxx\source\repos)。现在,当我运行它时,它会按预期工作,但是客户端(浏览器)不会对来自服务器的signar调用做出反应。因为我没有从客户端调用函数,所以我没有使用自定义集线器 我的问题是:当我尝试从JS设置到服务器的Signal连接时,它告诉我在JS控制台中找不到匹配的构造函数。当使用docker中.NET Core 2.1的信号器在将项目移动到新PC后不工作 更新:已解决(阅读下文),docker,asp.net-core,signalr,Docker,Asp.net Core,Signalr,我在PC1上创建了这个项目。当我找到信号员时,我已经做了一段时间了。在实现并使SignalR正常工作后,我必须移动到一台新的PC上,因此我保存了项目文件夹并将其移动到新的PC上。我安装了Docker for Windows、.NET Core 2.1 SDK和VS。我将项目放在同一个文件夹中(C:\users\xxx\source\repos)。现在,当我运行它时,它会按预期工作,但是客户端(浏览器)不会对来自服务器的signar调用做出反应。因为我没有从客户端调用函数,所以我没有使用自定义集线
AddMessage()
中的断点查看集线器对象时,它不是null,因此某种构造函数正在工作
我不知道该怎么办
错误消息:
Connection disconnected with error'错误:服务器在关闭时返回错误:Connection closed with error。InvalidOperationException:找不到类型“Microsoft.AspNetCore.signal.Hub”的合适构造函数。确保类型是具体的,并且为公共构造函数的所有参数注册了服务。“
我的代码:
在Startup.cs中
更新:
好吧,我又开始工作了。问题显然是Microsoft.AspNetCore.signal.Hub
显然不是一个具体的类型。我不知道这是如何定义的,在什么意义上,Hub也不具体。我只知道这个神奇的修复解决了我的问题:
我制作了自己的Hub,名为ShoutboxHub
:
using Microsoft.AspNetCore.SignalR;
namespace Shoutbox.Hubs
{
public class ShoutboxHub : Hub
{
}
}
。。。并将包含
Hub
的三行内容更改为ShoutboxHub
(并使用Shoutbox.Hubs添加了;
,但这是不言而喻的)。就这样。看起来你已经解决了你的问题,但不确定你的意思。我一直认为必须实现一个Hub,即从一个Hub派生(创建自己的)如果你调用你的Hub(Hub),那么可能存在一个范围/引用问题而不是你的实现?@MarkRedmanHub
是一个抽象类型,这意味着它不能被实例化,必须被继承才能使用。我想这不是具体的。我只是不明白为什么在我的集线器在第一台PC上工作时使用Hub
。。。可能在这期间,NuGet软件包的更新正在进行Hub
absact
public class HomeController : Controller
{
private readonly ShoutboxDbContext context;
private readonly IHubContext<Hub> hub;
public HomeController(ShoutboxDbContext context, IHubContext<Hub> hub)
{
this.hub = hub;
this.context = context;
}
//...
[HttpPost]
public IActionResult AddMessage([FromBody]Message input)
{
//...
hub.Clients.All.SendAsync("Refresh");
return Json((Object)true);
}
}
var connection = new signalR.HubConnectionBuilder().withUrl("/shoutboxHub").build();
connection.on("Refresh", function () {
updateMessageBox();
});
connection.start().catch(function (err) {
return console.error(err.toString());
});
using Microsoft.AspNetCore.SignalR;
namespace Shoutbox.Hubs
{
public class ShoutboxHub : Hub
{
}
}