Клиент SignalR AzureFunction для подключения к AspNetCore WebApi Hub - PullRequest
0 голосов
/ 06 ноября 2019

У меня есть приложение webapi (aspnet core 2.2), которое вызывает функцию Azure, которая, в свою очередь, запускает соединение signalR и загружает данные в сокет, а затем закрывается.

До сегодняшнего дня это работалоотлично, по-видимому, теперь что-то, кажется, изменилось (предположительно, обновление пакета клиент / сервер signalR), которое сломало это со следующим исключением ...

Выполнено 'Выполнить' (Ошибка, Id = e2e2a0f8-f56d)-4fe1-a445-598b9338cb92) [06/11/2019 10:40:32] System.Private.CoreLib: Исключительная ситуация при выполнении функции: Выполнить. Microsoft.AspNetCore.Http.Connections.Common: получен недействительный ответ о согласовании. Microsoft.AspNetCore.Http.Connections.Common: инициализатор типа для «Microsoft.AspNetCore.Http.Connections.NegotiateProtocol» вызвал исключение. System.Text.Json: Метод не найден: 'Int32 System.Text.Encodings.Web.TextEncoder.FindFirstCharacterToEncodeUtf8 (System.ReadOnlySpan`1)'.

Код сервера выглядит следующим образом ...

Startup.cs

public void ConfigureServices(IServiceCollection services)
{
    services.AddSignalR();
}

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
    app.UseSignalR(routeBuilder => {
        routeBuilder.MapHub<NotificationHub>("/Hubs/Notification");
        routeBuilder.MapHub<WorkflowHub>("/Hubs/Workflow");
    });
}

WorkflowHub.cs

public class WorkflowHub : Hub
{
    public async Task ConsoleSend(string level, string message, string thread)
    {
        await Clients.Group(thread).SendAsync("ConsoleReceive", level, message, thread);
    }
}

...

и теперь код клиента (в функции azure) ...

Function.cs

var con = new HubConnectionBuilder().WithUrl(msg.Api + "Hubs/Workflow").Build();
con.On<Exception>("error", (ex) => Console.WriteLine(ex.Message + "\n" + ex.StackTrace));
await con.StartAsync();

Версии пакета: На сервере ... - Microsoft.AspNetCore.Signalr 1.1.0

В клиенте функции Azure ... - Micorsoft.AspNetCore.Signalr.Client 3.0.0

...

Я обычно используюNewtonsoft.Json для моих нужд Json, но этот новый System.Text.Json, похоже, набирает обороты, и я не уверен, что это какая-то проблема с версионированием, но добавление ссылки nuget на System.Text.Json на обоих концах делаетбез разницы в этой проблеме.

Обновление

Так что сегодня утром я обновил все решение до .Net Core 3.0, за исключением. Сборки Net Standard, основанные на .Net Standard 2.x.

Этим я мог бы ссылаться на соответствующие сборки протоколов либо для нового API System.Text.Json, либо для Newtonsoft.Json, но при этомУ меня возникли другие проблемы:

Это все еще не работает, это приводит к исключению ...

Выполнено 'Выполнить' (Ошибка, Id = e2265bbb-e59b-4b51-a0dd-d5798adccac1) [11/11/2019 12:50:46] System.Private.CoreLib: Исключительная ситуация при выполнении функции: Выполнить. wf: не удалось загрузить файл или сборку 'netstandard, версия = 2.1.0.0, культура = нейтральная, PublicKeyToken = cc7b13ffcd2ddd51'. Система не может найти указанный файл. System.Private.CoreLib: не удалось загрузить указанный файл.

... но, кроме того, некоторые из вызовов, которые я делаю в моем приложении WebApi, в котором размещены концентраторы, теперь не могут быть выполнены, кажетсячто среда OData не любит маршрутизацию конечных точек и, кажется, имеет открытые заявки на github, которые предполагают, что эта поддержка все еще находится в разработке.

но в любом случае ... SignalR все еще здесь не играет.

У кого-нибудь есть рабочий пример, в котором и .Net Core, и веб-клиент общаются с концентратором .Net Core, работающим под управлением .Net Core 2.x или .Net Core 3.x, насколько я могуКажется, что-нибудь не работает?

1 Ответ

0 голосов
/ 12 ноября 2019

Похоже, это была проблема с кэшированием при сборке. Очистка вашей сборки для конфигурации с одной сборкой, по-видимому, приводит к тому, что «при некоторых условиях я не могу определить» сборка, выбирающая версию сборки из другого определения сборки.

Чистый результат, я выполнил полное руководствоочистите и мой кеш Nuget, и мои папки bin во всем решении, и все это ожило.

Похоже, проблема с инструментами для меня не версия / Framework.

...