#c# #json #http #signalr
#c# #json #http #signalr
Вопрос:
Я пытаюсь узнать, как подключиться к серверу SignalR с помощью клиента C #. И я не уверен, будут ли шаги, которые я выполняю, считаться нормальными (будут работать). Поскольку я, конечно, получаю ошибки…
Я пытаюсь установить соединение с сайтом как:
var connection = new HubConnectionBuilder()
.WithUrl(new Uri("http://localhost:5100/appsHub"))
.WithAutomaticReconnect()
.Build();
Как только я запускаю это, я получаю следующее. Я не совсем уверен, в чем проблема, хотя здесь это из-за ссылки? Или я должен использовать другой проект по умолчанию?
Inner Exception 1:
FileLoadException: Could not load file or assembly 'System.Text.Encodings.Web, Version=5.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51'. The located assembly's manifest definition does not match the assembly reference. (0x80131040)
И затем я хочу отправить идентификатор в URL в виде объекта JSON.
Я пытался заставить это работать в течение недели, и да, я не уверен, как это сделать:(.
Буду признателен за любую помощь.
С уважением,
Комментарии:
1. Есть ли какие-либо пакеты nuget для консолидации в решении?
2. к сожалению, нет. Все чисто, новый проект только с этими строками.
3. Какая целевая структура установлена для проекта? Какую версию
Microsoft.AspNetCore.SignalR.Client
он использует? Если ваш проект нацеленnetcoreapp3.1
, то он должен использоватьMicrosoft.AspNetCore.SignalR.Client
3.1.x, потому что требуется версия 5net5
.4. тип проекта — консольное приложение (.Net Core). Это последняя версия 2.4.1.
5. Я имею в виду прозвище целевого фреймворка (см. Это: docs.microsoft.com/en-us/dotnet/standard/frameworks ), а не тип проекта. Обновил мой комментарий выше.
Ответ №1:
Будьте осторожны с учебниками. Обычно они используют последние версии пакетов. Например. ASP.NET Клиент Core SignalR .NET предлагает сделать это:
Install-Package Microsoft.AspNetCore.SignalR.Client
Это работает нормально, если последняя версия пакета нацелена на ту же версию фреймворка, что и ваш проект. Но если ваш проект нацелен на другую версию фреймворка, вы получите ошибки, подобные тем, которые вы опубликовали.
На данный момент целевой платформой по умолчанию для консольных приложений в VS2019 является netcoreapp3.1
.
Latest Microsoft.AspNetCore.SignalR.Client
requires net5.0
.
Либо измените целевую платформу на net5.0
для вашего консольного приложения, либо используйте Microsoft.AspNetCore.SignalR.Client
версию v3.1.x (последняя версия совместима с 3.1.10 netcoreapp3.1
).
Это управление версиями пакетов очень раздражает, IMO.
У нас около 300 проектов, и наша версия LTS будет использоваться netcoreapp3.1
до конца своей жизни. Если открыть исходные тексты версий LTS и вкладку Nuget внутри VS now, он увидит много «доступных» обновлений пакетов. Но эти обновления не могут быть применены из-за несовместимых версий фреймворка. Этот мусор скрывает важные обновления для ряда сторонних пакетов, которые предназначены netstandard
для .NET Core /.NET и не принадлежат им.NET.
В результате теряется много времени на мониторинг обновлений для сторонних пакетов.
Комментарии:
1. Ах, хорошо. Я новичок в c #, но да, это проблема! Похоже, это решило проблему, и теперь я вернулся к своим первоначальным проблемам с самим кодом! Это сработало!!!!! УДИВИТЕЛЬНО!!! Вы можете видеть мою радость от этого!!
Ответ №2:
Вероятно, ваша проблема заключается в несовместимости версий фреймворка проекта и «* .SignalR.Пакет «Клиент».
Щелкните правой кнопкой мыши на вашем проекте и проверьте целевую версию framework в меню свойств. Версии должны быть совместимы с «* .SignalR.Пакет «Клиент».