c# - SignalR 连接问题 - 连接侦听器无法接受任何新连接

我有一个使用 ASPNet Core SignalR 集线器 (GameServer) 的游戏服务器和一个使用 ASPNet Core SignalR Client 库 (GameClient) 的客户端。我已经成功地在两者之间建立了联系并传递了一些消息。

中间还有一个类库来抽象出一些服务器和客户端都将使用的东西(GameInteraction)。 GameInteraction 是一个 .Net 标准库(我使用 Unity3d 作为客户端,因此该库需要在 .Net 标准中)。

在 GameInteraction 中,我为 Microsoft.AspNetCore.SignalR.Client.HubConnection 添加了一些扩展方法,如下所示。我在 GameClient 中使用这些方法能够调用一些 GameServer 函数,而不必确保客户端知道要调用哪些方法。

public static async Task<string> CreateGame(this HubConnection connection)
    {
        var gameId = await connection.InvokeAsync<string>(nameof(IServer.CreateGame));
        return gameId;
    }

    public static async Task JoinGame(this HubConnection connection, string playerName, string gameId)
    {
        await connection.InvokeAsync(nameof(IServer.JoinGame), playerName, gameId);
    }

现在,每当 GameClient 尝试建立与服务器的连接时,我都会收到以下错误。

Microsoft.AspNetCore.Server.Kestrel[0]
      The connection listener failed to accept any new connections.
System.MissingMethodException: Method not found: 'Microsoft.AspNetCore.Http.Features.IFeatureCollection Microsoft.AspNetCore.Connections.ConnectionContext.get_Features()'.
   at Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Infrastructure.KestrelConnection..ctor(Int64 id, ServiceContext serviceContext, ConnectionDelegate connectionDelegate, ConnectionContext connectionContext, IKestrelTrace logger)
   at Microsoft.AspNetCore.Server.Kestrel.Core.Internal.ConnectionDispatcher.<>c__DisplayClass8_0.<<StartAcceptingConnectionsCore>g__AcceptConnectionsAsync|0>d.MoveNext()

我有一种感觉,这是因为我使用的 SignalR 库之间存在一些不匹配,即使我对所有三个项目都使用了 ASPNet Core 版本。请注意,如果我删除了扩展方法,但没有从 GameInteraction 中删除 SignalR.Client 库,则连接仍然无法建立。只有当我完全从 GameInteraction 中删除库时,事情才会再次起作用。

有人可以推动我寻求解决方案吗?提前致谢。

回答1

在服务器项目中使用“.NET Core 3.1”作为目标框架但安装 Microsoft.AspNetCore.SignalR.Client 的最新 6.0.x 版本时,我得到了 MissingMethodException ConnectionContext.get_Features()。

目标框架和SignalR client的版本号需要对应,所以我通过将NuGet包管理器中的SignalR.Client包更新为3.1.25解决了这个问题

回答2

我发现了问题所在。我的服务器和 .Net Core 客户端在 .Net Core 3.1 上运行。 GameInteraction 库在 .Net Standard 2.1 上运行。

将服务器和客户端上的目标框架从 .Net core 3.1 更改为 .Net 6.0 解决了该问题。

相似文章

最新文章