为什么 Blazor 页面会自动创建 websocket 连接?

Why does Blazor page create websocket connection automatically?

我在 asp.net 核心 3.1 中创建了一个 Blazor 项目并添加了 API 支持,现在正在向它添加 Websockets。

我遵循了本教程。

https://dotnetplaybook.com/which-is-best-websockets-or-signalr/

虽然 websocket 中间件和一切正常,但当我将它集成到 Blazor 项目中时,我遇到了问题

Hello from 2nd Request Delegate - No WebSocket
WebSocketServerConnectionManager-> AddSocket: WebSocket added with ID: 18a403b3-cbab-4523-b25d-00cddd4f05d5
Receive->Text
Message: {"protocol":"blazorpack","version":1}
Unhandled exception. Receive->Close on: 18a403b3-cbab-4523-b25d-00cddd4f05d5
Managed Connections: 0
Newtonsoft.Json.JsonReaderException: Additional text encountered after finished reading JSON content: . Path '', line 1, position 37.
   at Newtonsoft.Json.JsonTextReader.Read()
   at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.Deserialize(JsonReader reader, Type objectType, Boolean checkAdditionalContent)
   at Newtonsoft.Json.JsonSerializer.DeserializeInternal(JsonReader reader, Type objectType)
   at Newtonsoft.Json.JsonSerializer.Deserialize(JsonReader reader, Type objectType)
   at Newtonsoft.Json.JsonConvert.DeserializeObject(String value, Type type, JsonSerializerSettings settings)
   at Newtonsoft.Json.JsonConvert.DeserializeObject[T](String value, JsonSerializerSettings settings)
   at Newtonsoft.Json.JsonConvert.DeserializeObject[T](String value)

显然,当我通过 blazor 本身加载网页时,似乎与服务器建立了 websocket 连接(即使我没有做任何事情)。

套接字消息==> {"protocol":"blazorpack","version":1}

当然代码不处理这种格式,因此错误(可以修复)。

但是我对这个自动套接字连接很好奇。有人知道更多关于来自 Blazor 模板的神秘内置套接字消息吗?

Blazor 使用 Websockets(通过 SignalR)在客户端和服务器部分之间传递信息。它是平台整个架构的基础。它可以退回到 http long-polling 但不推荐这样做。参见 https://docs.microsoft.com/en-us/aspnet/core/blazor/host-and-deploy/server?view=aspnetcore-3.1#signalr-configuration

我怀疑您是否需要一个特定的单独的 websocket 或 signalr 实现(除非它连接到与 Blazor 应用程序分开的不同服务器/应用程序)。