SignalR .NET Core:写入消息失败。正在中止连接。值不能为空。(参数“输入类型”)

JC9*_*C97 1 c# serialization signalr asp.net-core

我正在使用 SignalR 传输一些实时数据。我可以完美地连接我的 js 客户端,但是只要我调用一个方法,只有当我使用 signalR 的调试日志时,我就会收到下面的错误(否则它只会Error: Invocation canceled due to the underlying connection being closed.在调用时抛出)。如果我在调用该方法的中心放置断点,他会遍历它,但不知何故我仍然遇到这个隐藏的错误。

dbug: Microsoft.AspNetCore.SignalR.Internal.DefaultHubDispatcher[1]
      Received hub invocation: InvocationMessage { InvocationId: "0", Target: "WatchSimulations", Arguments: [ System.Collections.Generic.List`1[System.Guid] ], StreamIds: [  ] }.
Microsoft.AspNetCore.SignalR.Internal.DefaultHubDispatcher: Debug: Received hub invocation: InvocationMessage { InvocationId: "0", Target: "WatchSimulations", Arguments: [ System.Collections.Generic.List`1[System.Guid] ], StreamIds: [  ] }.
dbug: Microsoft.AspNetCore.SignalR.HubConnectionContext[6]
Microsoft.AspNetCore.SignalR.HubConnectionContext: Debug: Failed writing message. Aborting connection.

System.ArgumentNullException: Value cannot be null. (Parameter 'inputType')
   at System.Text.Json.JsonSerializer.Serialize(Utf8JsonWriter writer, Object value, Type inputType, JsonSerializerOptions options)
   at Microsoft.AspNetCore.SignalR.Protocol.JsonHubProtocol.WriteCompletionMessage(CompletionMessage message, Utf8JsonWriter writer)
   at Microsoft.AspNetCore.SignalR.Protocol.JsonHubProtocol.WriteMessageCore(HubMessage message, IBufferWriter`1 stream)
   at Microsoft.AspNetCore.SignalR.Protocol.JsonHubProtocol.WriteMessage(HubMessage message, IBufferWriter`1 output)
   at Microsoft.AspNetCore.SignalR.HubConnectionContext.WriteCore(HubMessage message, CancellationToken cancellationToken)
      Failed writing message. Aborting connection.
Microsoft.AspNetCore.SignalR.HubConnectionHandler: Debug: OnConnectedAsync ending.
      System.ArgumentNullException: Value cannot be null. (Parameter 'inputType')
Microsoft.AspNetCore.Http.Connections.Internal.Transports.WebSocketsTransport: Debug: Waiting for the client to close the socket.
         at System.Text.Json.JsonSerializer.Serialize(Utf8JsonWriter writer, Object value, Type inputType, JsonSerializerOptions options)
         at Microsoft.AspNetCore.SignalR.Protocol.JsonHubProtocol.WriteCompletionMessage(CompletionMessage message, Utf8JsonWriter writer)
         at Microsoft.AspNetCore.SignalR.Protocol.JsonHubProtocol.WriteMessageCore(HubMessage message, IBufferWriter`1 stream)
         at Microsoft.AspNetCore.SignalR.Protocol.JsonHubProtocol.WriteMessage(HubMessage message, IBufferWriter`1 output)
         at Microsoft.AspNetCore.SignalR.HubConnectionContext.WriteCore(HubMessage message, CancellationToken cancellationToken)
dbug: Microsoft.AspNetCore.SignalR.HubConnectionHandler[6]
      OnConnectedAsync ending.
dbug: Microsoft.AspNetCore.Http.Connections.Internal.Transports.WebSocketsTransport[7]
      Waiting for the client to close the socket.
dbug: Microsoft.AspNetCore.Http.Connections.Internal.Transports.WebSocketsTransport[2]
      Socket closed.
Microsoft.AspNetCore.Http.Connections.Internal.Transports.WebSocketsTransport: Debug: Socket closed.
Run Code Online (Sandbox Code Playgroud)

中心:

    [Authorize]
    public class ProgressHub : Hub<IProgressHub>
    {
        public Task WatchSimulations(List<Guid> simulationUids)
        {
            var tasks = new List<Task>();
            simulationUids.ForEach(id =>
            {
                tasks.Add(
                    Groups.AddToGroupAsync(Context.ConnectionId, id.ToString())
                );
            });
            return Task.WhenAll(tasks);
        }
    }
Run Code Online (Sandbox Code Playgroud)

我正在使用 .NET Core 3.1 和 @microsoft/signalr 5.0.0。

有人认识这个问题吗?

谢谢!

小智 6

如果您从 3.1 项目引用 System.Text.Json 5.0,则可能会发生此错误。3.1.11 将包含对此的修复。目前,您可以避免更新 System.Text.Json,将应用程序升级到 net5.0,或者改用 Newtonsoft.Json 而不是 System.Text.Json。