Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/drupal/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
docker中.NET Core 2.1的信号器在将项目移动到新PC后不工作 更新:已解决(阅读下文)_Docker_Asp.net Core_Signalr - Fatal编程技术网

docker中.NET Core 2.1的信号器在将项目移动到新PC后不工作 更新:已解决(阅读下文)

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调用做出反应。因为我没有从客户端调用函数,所以我没有使用自定义集线

我在PC1上创建了这个项目。当我找到信号员时,我已经做了一段时间了。在实现并使SignalR正常工作后,我必须移动到一台新的PC上,因此我保存了项目文件夹并将其移动到新的PC上。我安装了Docker for Windows、.NET Core 2.1 SDK和VS。我将项目放在同一个文件夹中(C:\users\xxx\source\repos)。现在,当我运行它时,它会按预期工作,但是客户端(浏览器)不会对来自服务器的signar调用做出反应。因为我没有从客户端调用函数,所以我没有使用自定义集线器

我的问题是:当我尝试从JS设置到服务器的Signal连接时,它告诉我在JS控制台中找不到匹配的构造函数。当使用
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),那么可能存在一个范围/引用问题而不是你的实现?@MarkRedman
Hub
是一个
抽象类型,这意味着它不能被实例化,必须被继承才能使用。我想这不是具体的。我只是不明白为什么在我的集线器在第一台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
    {
    }
}