c# - SignalR .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.
中心:
[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);
}
}
我正在使用 .NET Core 3.1 和 @microsoft/signalr 5.0.0。
有人认识这个问题吗?
谢谢!
解决方案
如果您从 3.1 项目引用 System.Text.Json 5.0,则可能会发生此错误。3.1.11 将包含对此的修复。目前,您可以避免更新 System.Text.Json,将您的应用升级到 net5.0,或者改用 Newtonsoft.Json 而不是 System.Text.Json。
推荐阅读
- php - WordPress:在自定义帖子类型中获取模块名称的帖子 slug
- python - Python:将文件写入特定目录
- javascript - 我如何在新表中显示已输入值的行?
- python - 用BS4刮
- reactjs - 在 Material Ui Datagrid 中更新行后不显示数据
- shell - 在 Applescript 中执行 shell 时,有没有办法忽略不允许的访问?
- python - Keras load_model 在 Jupyter 笔记本中不起作用,但在 Colab 中起作用
- python - 具有任意数量的 int 参数输入提示的函数
- plc - 以太网/IP - 是否可以使用 Get/Set_Attribute_Single 和扩展逻辑格式从程序集对象读取/写入特定数据?
- javascript - 承诺期间出现问题时调试代码