SignalR Webhost с ASP.NET Core 2.1 и приложением UWP, поскольку Клиент возвращает «Метод 405 не разрешен» - PullRequest
0 голосов
/ 02 июня 2018

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

  • ASP.NET Core 2.1 Web Api - В этом WebApi я использую хост SignalR (опубликован как win8-arm win10-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 клиента SignalR.

Кроме того, я знаю, что пакет 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 Ответ

0 голосов
/ 05 июня 2018

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

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

...