在将项目移动到新PC后,Docker中的SignalR for .NET Core 2.1无法正常工作

问题描述 投票:0回答:1

UPDATE: SOLVED (read below)

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

我的问题是:当我尝试从JS设置与服务器的SignalR连接时,它告诉我在JS-Console中它找不到匹配的构造函数。当使用AddMessage()中的断点查看hub对象时,它不是null,因此某种构造函数正在工作。

我不知道该怎么做。

Error message:

Connection disconnected with error 'Error: Server returned an error on close: Connection closed with an error. InvalidOperationException: A suitable constructor for type 'Microsoft.AspNetCore.SignalR.Hub' could not be located. Ensure the type is concrete and services are registered for all parameters of a public constructor.'.

My Code:

在Startup.cs中

public void ConfigureServices(IServiceCollection services)
{
    //...

    services.AddSignalR(o =>
    {
        o.EnableDetailedErrors = true;
    });
}

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
    //...

    app.UseSignalR(routes =>
    {
        routes.MapHub<Hub>("/shoutboxHub");
    });

    //...
}

在HomeController.cs中

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);
    }
}

在Index.js

var connection = new signalR.HubConnectionBuilder().withUrl("/shoutboxHub").build();

connection.on("Refresh", function () {
    updateMessageBox();
});

connection.start().catch(function (err) {
    return console.error(err.toString());
});
docker asp.net-core signalr
1个回答
0
投票

UPDATE:

好的,我让它再次运作。问题显然是Microsoft.AspNetCore.SignalR.Hub显然不是具体类型。究竟是怎么定义的,在什么意义上Hub不具体,我不知道。我只知道这个荒谬的解决方案解决了我的问题:

我创建了自己的Hub,名为ShoutboxHub

using Microsoft.AspNetCore.SignalR;

namespace Shoutbox.Hubs
{
    public class ShoutboxHub : Hub
    {
    }
}

...并将包含Hub的三行更改为ShoutboxHub(并添加了using Shoutbox.Hubs;,但这不言而喻)。而已。

© www.soinside.com 2019 - 2024. All rights reserved.