【发布时间】:2025-12-12 22:25:06
【问题描述】:
我在 asp.net core 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 在客户端部分和服务器部分之间传递信息的方式。它是整个平台架构的基础。它可以回退到 http 长轮询,但不建议这样做。 docs.microsoft.com/en-us/aspnet/core/blazor/host-and-deploy/… 。我怀疑你是否需要一个特定的单独的 websocket 或信号器实现(除非它是连接到 Blazor 应用程序之外的不同服务器/应用程序)。
-
“如果你不投反对票,那就太好了” ...人们会根据问题的质量投赞成票/反对票,而不是你是否刚刚是否被禁止。如果您要继续发布低质量的问题,那么您应该再次被禁止。这就是系统的工作原理。没有人会仅仅出于同情而容忍低质量,而不是当每天有数百个其他问题等待回答可能更容易回答时。碰巧的是,恕我直言,这是合理的,所以从我的角度来看,您无需担心。
-
@ADyson tnx 供您输入。是的,这是针对单独的套接字客户端的,我使用 blazor 只是为了避免 JS。计划在不使用任何更深层次的功能的情况下构建一个简单的网站......但这主要是一个 webapi,而不是其他任何东西......也可以随时发表你的评论作为答案,这样我就可以投票......这解决了我的主要问题。 .