SignalR Webhost с ASP.NET Core 2.1 и приложением UWP, поскольку Клиент возвращает "Метод 405 не разрешен"

Я борюсь с этим некоторое время сейчас, и я не могу заставить его работать. У меня есть 2 приложения, оба работают на Raspberry Pi 2 с Win IoT:

  • ASP.NET Core 2.1 Web Api - в рамках этого WebApi я использую хост SignalR (опубликован как win8-armwin10-arm).

  • Универсальное приложение для Windows - это приложение будет клиентом, который должен взаимодействовать с хостом и всеми другими клиентами (публикуется как ARM).

Когда я развертываю Web Api на Raspberry, все хорошо. У меня есть тестовое консольное приложение, действующее как клиент, который может без проблем подключиться к хосту SignalR. Когда я развертываю приложение UWP и пытаюсь его запустить, оно вылетает в hubConn.Start(...) метод HubConnection и возвращает ошибку:

HttpClientException: StatusCode: 405, ReasonPhrase: "Метод не разрешен", Версия: 1.1, Содержимое: System.Net.Http.StreamContent, Заголовки: {Сервер: Kestrel Дата: Сб, 02 июня 2018 17:04:15 GMT
Content-Length: 0 Content-Type: text / plain}

Testconsole и UWP оба используют Microsoft.AspNet.SignalR.Client (2.2.3) пакет nuget (который является последним). ASP.NET Core 2.1 Web Api использует Microsoft.AspNetCore.App SDK (2.1.0).

Читая этот пост, совместимость версии SignalR (StatusCode: 405 "Метод не разрешен") знаком с тем фактом, что SignalR не имеет обратной совместимости для обоих хостов как клиентов. Но я ожидаю, что, поскольку я использую последние пакеты и версии nuget, доступные на nuget, все будет работать.

Чего я также не понимаю, так это того, почему Test Console действительно может подключаться без ошибок, но приложение UWP даже не использует тот же пакет Nuget Client SignalR Client.

Кроме того, я знаю, что пакет ASP.NET Core 2.1 и пакет клиента SignalR - это 2 разных пакета, но я не могу добавить пакет nuget Microsoft.AspNetCore.App проекту UWP, так как он не совместим ни с каким win10-arm Платформа.

Любая идея, как я могу получить соединение и работает?

Обновите вопрос 4 июня 2018 года

Я удалил свои предыдущие предположения в этом вопросе. Я думал, что приложение Test Console было успешно подключено, но оказалось, что это не так. Разница была в том, что Test Console пыталась подключиться синхронно, но это привело к проглатыванию ошибки. Я проверил состояние соединения с хостом SignalR, которое перешло от "Соединение" к "Отключено".

Вопрос все еще остается: если я хочу работать с ASP.NET Core 2.1 SignalR, какой пакет nuget я должен включить в свое приложение Test Console, а также в мой проект UWP?

Вот часть кода; все проекты по умолчанию полностью через Файл - Новый проект, а также код ниже.

ASP.NET Core 2.1 Web Api

Startup.cs

public class Startup
{
    ...

    // This method gets called by the runtime. Use this method to add services to the container.
    public void ConfigureServices(IServiceCollection services)
    {
        ...

        services.AddMvc();
        services.AddSignalR();
    }

    // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
    public void Configure(IApplicationBuilder app, IHostingEnvironment env)
    {

        ...

        app.UseSignalR(route =>
        {
            route.MapHub<HomeAutomationHost>("/HomeAutomationHost");
        });

        app.UseMvc();
    }
}

Универсальное приложение для Windows

MainPage.xaml.cs

public class MainPage 
{
    ...

    public async Task DoConnect()
    {
            var hubConn = new HubConnection("http://192.168.2.49:5000/HomeAutomationHost", false);
            hubConn.EnsureReconnecting();

            var signalRHost = hubConn.CreateHubProxy("HomeAutomationHost");

            await hubConn.Start(new WebSocketTransport());
    }
}

1 ответ

Решение

Я на самом деле использовал неправильный пакет NuGet. я хочу Microsoft.AspNetCore.SignalR.Client (нота AspNetCore во имя а не AspNet). Это, безусловно, легко перепутать, хотя. Пакет, который я использовал, - это клиент для ASP.NET SignalR, а мне нужно обратиться к клиенту для ASP.NET Core SignalR.

Подобные имена пакетов, которые могут очень легко появиться в проекте, не замечая этого.

Другие вопросы по тегам