Почему страница Blazor автоматически создает соединение с websocket?

#asp.net #asp.net-blazor

#asp.net #asp.net-blazor

Вопрос:

Я создал проект Blazor в asp.net ядро 3.1 и добавлена поддержка 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)
  

По-видимому, к серверу подключается websocket (хотя я ничего не делал), как только я загружаю веб-страницу с помощью самого blazor.

Сообщение сокета ==> {"protocol":"blazorpack","version":1}

Конечно, код не обрабатывает этот формат и, следовательно, ошибку (которая может быть исправлена).

Но мне любопытно, с чего началось это автоматическое подключение к сокетам. Кто-нибудь знает больше о таинственных встроенных сообщениях сокета из шаблона Blazor?

Комментарии:

1. Именно так blazor передает информацию между клиентской частью и серверной частью. Это фундаментально для всей архитектуры платформы. Он может вернуться к длительному опросу http, но это не рекомендуется. learn.microsoft.com/en-us/aspnet/core/blazor/host-and-deploy /… . Я сомневаюсь, что вам нужна конкретная отдельная реализация websocket или signalr поверх этого (если только это не для подключения к другому серверу / приложению, отличному от приложения Blazor).

2. «будет действительно здорово, если вы не будете понижать это» … люди будут голосовать вверх / вниз в зависимости от качества вопроса, а не от того, были ли вы только что забанены или нет. Если вы продолжите публиковать некачественные вопросы, вы заслужите еще один бан. Вот как работает система. Никто не собирается терпеть низкое качество только из сочувствия, не тогда, когда есть сотни других вопросов, ожидающих ответа каждый день, которые могли бы быть более ответственными. Как это происходит, это разумное ИМХО, так что вам не о чем беспокоиться, с моей точки зрения.

3. @ADyson tnx за ваши комментарии. Да, это для отдельного клиента сокета, и я использую blazor только для того, чтобы избежать JS. Планируйте создать простой веб-сайт без использования каких-либо его более глубоких функций… Но в основном это webapi больше, чем что-либо еще .. также не стесняйтесь оставлять комментарий в качестве ответа, чтобы я мог проголосовать.. это решает мою главную проблему..

Ответ №1:

С помощью Websockets (через SignalR) Blazor передает информацию между клиентской частью и серверной частью. Это фундаментально для всей архитектуры платформы. Он может вернуться к длительному опросу http, но это не рекомендуется. Смотрите https://learn.microsoft.com/en-us/aspnet/core/blazor/host-and-deploy/server?view=aspnetcore-3.1#signalr-configuration .

Я сомневаюсь, что вам нужна конкретная отдельная реализация websocket или signalr поверх этого (если только это не для подключения к другому серверу / приложению, отдельному от приложения Blazor).